本文目录一览:
- mysql 字符串截取
- mysql中 varchar(20)我的数据长度超过了,varchar不是自动增长的吗,为什么他把后面超过的内容给截了。
- mysql -e 拼接的字段别名超长 256后就被截取了
mysql 字符串截取
使用MYSQL的SUBSTRING_INDEX
函数实现你的功能,此函数的语法解释如下:
SUBSTRING_INDEX(str,delim,count)
返回从字符串str
的第count
个出现的分隔符delim
之后的子串。如果count
是正数,返回最后的分隔符到左边(从左边数) 的所有字符。如果count
是负数,返回最后的分隔符到右边的所有字符(从右边数)。
SELECT SUBSTRING_INDEX('', '.', 2);
-- ''
SELECT SUBSTRING_INDEX('', '.', -2);
-- 'mysql.com'
该函数对多字节是可靠的。
如果你的字段名为xxx
,值为201207|123|23.5|100|50|
和20120703|19|212|||
,要获取第3个内容23.5
的函数是:
SUBSTRING_INDEX(SUBSTRING_INDEX(xxx,'|',3),'|',-1)
里面的函数获取第3个开始的所有内容,外面的函数获取里面函数结果的第1个内容。
mysql中 varchar(20)我的数据长度超过了,varchar不是自动增长的吗,为什么他把后面超过的内容给截了。
mysql中 varchar(20)
数据长度超过了是设置错误造成的,解决方法为:
- 通过
my.ini
(Linux下为my.cnf
)的配置文件进行修改。一般my.ini
文件在安装文件的根目录下。 - 系统是Windows10,安装目录下没有
my.ini
文件。 - 仔细找了一下,
my.ini
文件在ProgramData
下。 - 打开配置文件,在
[mysqld]
的后面加入一行ft_min_word_len=1
。PS:也可以设置成ft_min_word_len=2
,具体情况根据自己的中文数据而定。 - 重启MySQL服务。注意,配置文件修改后一定要重启服务后才能生效。
- 查看一下最小索引长度,确定生效。SQL语句:
SHOW GLOBAL VARIABLES LIKE '%__word_len%';
mysql -e 拼接的字段别名超长 256后就被截取了
在SQL中加入SET NAMES utf8
即可。
- 打开
mysql/my.ini
文件夹找到default-character-set=Latin1
更改为default-character-set=gb2312
; - 在创建表的时候最后面记得加这句话:
DEFAULT CHARSET=gb2312
,如下所示:
CREATE TABLE 表名(...) DEFAULT CHARSET=gb2312;
- 在调用数据库的时候,加一句话,如下所示:
$link = mysql_connect('localhost','root','');
mysql_select_db('stud', $link);
mysql_query("SET NAMES 'gb2312'");
这样,有2、3两步实现了编码及存储入表的匹配。
出现中文无法显示的原因有一个就是存储的编码跟连接数据库时的编码不一致导致的,特征表现为中文显示为?
。