首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

谨记不要在MySQL中使用“utf8编码

谨记不要在MySQL中使用“utf8编码 掉坑回顾: 最近在工作中遇到一个BUG,用于记录客户昵称的数据,在插入带有表情的字符时候报错.使用的存储引擎是INNODB,当我查看数据库字段的时候确实是设置的...utf8,我传入的字符也是utf8编码集,这有什么错?...直到我深入了解才发自己使用的姿势并不对,mysql数据库中的"utf8"并不是真正的utf8编码,关于这个问题mysql官方一直未能修复,取而代之的推出了utf8mb4,这一点让我记忆犹新,切记mysql...1.BUG重现 这里我做了一个简单的试验,来验证utf8mysql中存在的问题: 建立数据: CREATE TABLE `user` ( `id` int(10) NOT NULL AUTO_INCREMENT...简单归纳综合如下: MySQL 的“utf8mb4”是真正的“UTF-8”,MySQL 的“utf8”是一种“专属的编码”,它能够编码的 Unicode 字符其实不多,所以在使用mysql的时候还是用

1.1K30

UTF8变长编码

UTF8变长编码可以解决。有的文字是1个字节存储的,有的文字是2个字节存储的,还有3个字节存储的,还有4个字节存储的。 最后集合起来就是一共有一到四字节四种变长的编码。...如果是以0开头的,那么他就是一个1字节编码,取到它一字节的数据去一字节中找就OK了。...如果是以110开头的,那么它就是一个2字节编码,取到它两字节的数据去两字节中找就OK了,而且它的第二个字节一定要是10开头,不然就是乱码了。 后面类推。...可能我们仔细的看一下这个文件的内容,看一下字节出现个格式,和我们上面所说的是否一样,也就知道它是不是UTF8编码了。...,有助于提高性能,不过这不是必须的,我们没有这三个字节也可以判断文件的格式是不是UTF8编码方式。

2.8K20

mysql用sql语句创建和数据库设置字符编码

-- 创建数据库时,设置数据库的编码方式  -- CHARACTER SET:指定数据库采用的字符集,utf8不能写成utf-8 -- COLLATE:指定数据库字符集的排序规则,utf8的默认排序规则为...alter database dbtest CHARACTER SET utf8 COLLATE utf8_general_ci; -- 创建时,设置、字段编码 use dbtest; drop table... COLLATE utf8_general_ci; -- 修改编码 alter table tbtest character set utf8 COLLATE utf8_general_ci; -- ...修改字段编码 ALTER TABLE tbtest MODIFY email VARCHAR(60) CHARACTER SET utf8 COLLATE utf8_general_ci; -- 查看所有的字符编码...根本的办法是修改配置MYSQL文件MY.INI, character_set_server=utf8,配置到mysqld字段下。

10.3K00

mysql编码问题——charset=utf8你真的弄明白了吗?

当建时指定charset=utf8的时候,此时,插入中文为什么又可以插入中文,并且不乱码呢?当我们建时,不指定 charset=utf8的时候,此时,插入中文,为什么会报错呢?...而写入到数据库中数据采用什么格式写入,我们在建的时候已经指明了"charset=utf8",也就是说,mysql服务器(server)的字符集是UTF8。...mysql> #因此,一共需要设置3个参数: mysql> #1、客户端发送的编码mysql> #2、连接器使用的编码mysql> #3、返回数据的编码mysql> mysql> mysql...上述设置,是不是和图2(如下所示)中的情况,非常相似。唯一不同的就是系统默认mysql服务器的字符集是latin1,而图二中mysql服务器的字符集是utf8。..."命令,将mysql服务器的字符集设置utf8后,由于utf8是支持中文的,utf8是变长字符集,它能够支持全世界所有国家的语言。

1.5K50

mysql安装及设置编码和python操作mysql

python操作mysql的代码,在前面的那个python十个项目中已经用过了,不过对于mysql的安装,以及mysql-python的安装并没有提及,所以这里需要说一下。...首先安装mysql: sudo apt-get install mysql-server sudo apt-get install libmysqld-dev sudo apt-get install...(也可能不在etc下,你找到你的mysql目录,在mysql目录中有这个my.cnf,也可能在mysql目录的其他子目录下) 在[client]下面加上: default-character-set=utf8...在[mysqld]下面加上: collation-server = utf8_unicode_ci character-set-server = utf8 在[mysql]下添加: default-character-set...=utf8 重启服务器: service mysql restart 在mysql中键入命令: show variables like 'character_set_%' 然后你就看到数据库的各个部分的字符集了

1.6K30

ANSI, UNICODE,UTF8编码的区别

本地化过程中涉及到源文件和目标文件的传输问题,这时候编码就显得很重要。中文的网页和操作系统中通常采用ANSI编码,这也是微软OS的一个字符标准。...对于ANSI,不同的国家和地区制定了不同的标准,由此产生了GB2312(简体中文),BIG5(繁体中文),JIS(日文)等各自的编码标准。...但不同的ANSI编码在不同语言之间是不兼容的,所以对于不同的操作系统之间文件的传输,或者在同样的操作系统下,源文件语言不同于OS的语言文件的传输,需要转换成UT8格式。...,所以不同语种可以共存于文本中,解决国际化的问题 UTF8是Unicode一种压缩形式,英文A在unicode中表示为0x0041,老外觉得这种存储方式太浪费,因为浪费了50%的空间,于是就把英文压缩成...1个字节,成了utf8编码,但是汉字在utf8中占3个字节,显然用做中文不如 ansi合算,这就是中国的网页用作ansi编码而老外的网页常用utf8的原因。

2K60

ansi utf-8编码_utf8是等长编码

ANSI编码不是一种具体的编码方式,而是一种指定在某些环境下使用某些编码方式的标准。比如,在中文环境中ANSI的编码标准为GBK,在日语环境中ANSI的编码标准则是Shift_JIS编码。...中文环境下ansi编码对应的编码方式为GBK,GBK的编码规则为: a) 对于ascii字符集中的字符,使用ascii编码(也就是说gbk编码是兼容ascii编码的); b) 非ascii字符使用...本文不在叙述gbk的具体编码规则,简单来说该标准表达单个字符使用1字节、2字节、4字节这三种情况。 ASNI编码是不利于跨语言数据交流的,比如windows文件默认使用ANSI编码。...为了统一世界各种语言的编码,unicode编码被创造出来,需要注意的是unicode也不是一个具体的编码规则,在unicode标准下,有utf-8,utf-16等具体的实现。...他们都对应不同的编码规则。 在某个角度理解,ANSI编码是一种历史遗留,应该被淘汰,进而使用更加先进、方便的unicode编码

1K30

MySQL中的 utf8 并不是真正的UTF-8编码 ! !

他本身不就是utf8编码么!那我当时还改个锤子? 难道,MySQLutf8不是真正的UTF-8编码吗??! 卧槽这。。MySQL有bug!...在MySQL中,“utf8编码只支持每个字符最多三个字节,而真正的 UTF-8 是每个字符最多四个字节。 在utf8编码中,中文是占3个字节,其他数字、英文、符号占一个字节。...MySQL 的“utf8”是一种“专属的编码”,它能够编码的 Unicode 字符并不多。...不过我们可以试着猜测一下: 2002年,MySQL做出了一个决定:如果用户可以保证数据的每一行都使用相同的字节数,那么 MySQL 就可以在性能方面来一个大提升。...将 CHAR 列的编码设置为“utf8”。 我的猜测是 MySQL 开发者本来想帮助那些希望在空间和速度上双赢的用户,但他们搞砸了“utf8编码。 所以结果就是没有赢家。

85510
领券