精华内容
下载资源
问答
  • Python2: 在python2中,解释器缺省使用ascii编码进行 解释执行,在没有指定.py文件编码时...通过在.py文件第一行加上 # coding=utf-8/gbk,解释器就认为当前文件编码格式为utf-8/gbk,从而可以正确解释执行。 ...

    Python2:

    在python2中,解释器缺省使用ascii编码进行

    解释执行,在没有指定.py文件编码时,如果遇到中文字符,则直接报错:Non-ASCII character found, but no encoding declared。

    通过在.py文件第一行加上 # coding=utf-8/gbk,解释器就认为当前文件编码格式为utf-8/gbk,从而可以正确解释执行。

     

    Python3:

    python3缺省使用utf-8进行解释执行,同时所有的字符串都是以unicode进行存储。所以如果.py文件中有utf-8编码的中文则程序可以正确解释执行,但是如果程序中gbk编码的中文,还是会报编码相关的错误,这时候就需要使用# coding=gbk来显示指定文件的编码。

    所以,# coding=utf-8/gbk需要根据文件真实的编码进行指定。

    展开全文
  • MYSQL中SET NAMES UTF8的作用和内涵

    千次阅读 2017-12-28 19:17:22
    机器学习教程「美团」算法工程师带你入门机器学习 以及「三分钟系列」数据结构与算法已经开始更新了,欢迎大家订阅~这篇专栏整合了这几年算法知识,简单易懂,也将是我实体书BLOG版。 欢迎大家扫码关注微信...

    我的机器学习教程「美团」算法工程师带你入门机器学习  以及 「三分钟系列」数据结构与算法  已经开始更新了,欢迎大家订阅~这篇专栏整合了这几年的算法知识,简单易懂,也将是我实体书的BLOG版。

    欢迎大家扫码关注微信公众号「图灵的猫」,除了有更多AI、算法、Python相关文章分享,还有免费的SSR节点和外网学习资料。其他平台(微信/知乎/B站)也是同名「图灵的猫」,不要迷路哦~

     

    对于MYSQL的字符集转换问题,我们通常都知道,SET NAMES UFT8作为声明
    该语句作用相当于
    SET character_set_client = x;
    SET character_set_results = x;
    SET character_set_connection = x;
    
    set names utf8 是用于设置编码,可以再在建数据库的时候设置,也可以在创建表的时候设置,或只是对部分字段进行设置,而且在设置编码的时候,这些地方最好是一致的,这样能最大程度上避免数据记录出现乱码。
    
    执行SET NAMES utf8的效果等同于同时设定如下:
    SET character_set_client='utf8';
    SET character_set_connection='utf8';
    SET character_set_results='utf8';
    
    另外,如果数据出现乱码可以试着用以下办法解决:
    一、避免创建数据库及表出现中文乱码和查看编码方法
    1、创建数据库的时候:CREATE DATABASE `test`
    CHARACTER SET 'utf8'
    COLLATE 'utf8_general_ci';
    2、建表的时候 CREATE TABLE `database_user` (
    `ID` varchar(40) NOT NULL default '',
    `UserID` varchar(40) NOT NULL default '',
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    这3个设置好了,基本就不会出问题了,即建库和建表时都使用相同的编码格式。
    如果是已经建了库和表可以通过以下方式进行查询。
    1.查看默认的编码格式:
    mysql> show variables like "%char%";
    +--------------------------+---------------+
    | Variable_name | Value |
    +--------------------------+---------------+
    | character_set_client | gbk |
    | character_set_connection | gbk |
    | character_set_database | utf8 |
    | character_set_filesystem | binary |
    | character_set_results | gbk |
    | character_set_server | utf8 |
    | character_set_system | utf8 |
    +--------------------------+-------------+
    注:以前2个来确定,可以使用set names utf8,set names gbk设置默认的编码格式;乱码。
    
    执行SET NAMES utf8的效果等同于同时设定如下:
    SET character_set_client='utf8';
    SET character_set_connection='utf8';
    SET character_set_results='utf8';
    
    另外,如果数据出现乱码可以试着用以下办法解决:
    一、避免创建数据库及表出现中文乱码和查看编码方法
    1、创建数据库的时候:CREATE DATABASE `test`
    CHARACTER SET 'utf8'
    COLLATE 'utf8_general_ci';
    2、建表的时候 CREATE TABLE `database_user` (
    `ID` varchar(40) NOT NULL default '',
    `UserID` varchar(40) NOT NULL default '',
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    这3个设置好了,基本就不会出问题了,即建库和建表时都使用相同的编码格式。
    如果是已经建了库和表可以通过以下方式进行查询。
    1.查看默认的编码格式:
    mysql> show variables like "%char%";
    +--------------------------+---------------+
    | Variable_name | Value |
    +--------------------------+---------------+
    | character_set_client | gbk |
    | character_set_connection | gbk |
    | character_set_database | utf8 |
    | character_set_filesystem | binary |
    | character_set_results | gbk |
    | character_set_server | utf8 |
    | character_set_system | utf8 |
    +--------------------------+-------------+
    注:以前2个来确定,可以使用set names utf8,set names gbk设置默认的编码格式;

     

     

     

     

    此外,Windows下可通过修改my.ini内的

    1. # CLIENT SECTION
    2. [mysql]
    3. default-character-set=utf8
    4. # SERVER SECTION
    5. [mysqld]
    6. default-character-set=utf8

    这两个字段来更改数据库的默认字符集。第一个是客户端默认的字符集,第二个是服务器端默认的字符集。假设我们把两个都设为utf8,然后在MySQL Command Line Client里面输入“show variables like “character_set_%”;”,可看到如下字符:

    character_set_client latin1
    character_set_connection latin1
    character_set_database utf8
    character_set_results latin1
    character_set_server utf8
    character_set_system utf8

    其中的utf8随着我们上面的设置而改动。此时,要是我们通过采用UTF-8的PHP程序从数据库里读取数据,很有可能是一串“?????” 或者是其他乱码。网上查了半天,解决办法倒是简单,在连接数据库之后,读取数据之前,先执行一项查询“SET NAMES UTF8”,即在PHP里为

    1. mysql_query("SET NAMES UTF8"); (注意大写)

    即可显示正常(只要数据库里信息的字符正常)。为什么会这样?这句查询“SET NAMES UTF8”到底是什么作用?

    到MySQL命令行输入“SET NAMES UTF8;”,然后执行“show variables like “character_set_%”;”,发现原来为latin1的那些变量“character_set_client”、“character_set_connection”、“character_set_results”的值全部变为utf8了,原来是这3个变量在捣蛋。查阅手册,上面那句等于:

    1. SET character_set_client = utf8;
    2. SET character_set_results = utf8;
    3. SET character_set_connection = utf8;

    信息输入路径:client→connection→server;
    信息输出路径:server→connection→results。

    换句话说,每个路径要经过3次改变字符集编码。以出现乱码的输出为例,server里utf8的数据,传入connection转为latin1,传入results转为latin1,utf-8页面又把results转过来。如果两种字符集不兼容,比如latin1和utf8,转化过程就为不可逆的,破坏性的。所以就转不回来了。

    但这里要声明一点,“SET NAMES UTF8”作用只是临时的,MySQL重启后就恢复默认了。

    接下来就说到MySQL在服务器上的配置问题了。岂不是我们每次对数据库读写都得加上“SET NAMES UTF8”,以保证数据传输的编码一致?能不能通过配置MySQL来达到那三个变量默认就为我们要想的字符集?手册上没说,我在网上也没找到答案。所以,从服务器配置的角度而言,是没办法省略掉那行代码的。

    总结以下几点:

    要保证select的返回与程序编码一致,即character_set_results与程序编码一致.

    要保证程序编码与浏览器一致,即程序编码与<meta http-equiv="Content-Type" content="text/html; charset=?" />一致.

    展开全文
  • 作者:brightwang原文:https://www.jianshu.com/p/ab9aa8d4df7d最近我遇到了一个bug,我试着通过Rails在以“utf8”编码MariaDB中保存一个UTF-8字符串,然后出现了一个离奇错误:Incorrect string value: ‘ð...

    作者:brightwang原文:https://www.jianshu.com/p/ab9aa8d4df7d

    最近我遇到了一个bug,我试着通过Rails在以“utf8”编码的MariaDB中保存一个UTF-8字符串,然后出现了一个离奇的错误:

    Incorrect string value: ‘ð

    我用的是UTF-8编码的客户端,服务器也是UTF-8编码的,数据库也是,就连要保存的这个字符串“😃”也是合法的UTF-8。

    问题的症结在于,MySQL的“utf8”实际上不是真正的UTF-8。

    “utf8”只支持每个字符最多三个字节,而真正的UTF-8是每个字符最多四个字节。

    MySQL一直没有修复这个bug,他们在2010年发布了一个叫作“utf8mb4”的字符集,绕过了这个问题。

    当然,他们并没有对新的字符集广而告之(可能是因为这个bug让他们觉得很尴尬),以致于现在网络上仍然在建议开发者使用“utf8”,但这些建议都是错误的。

    简单概括如下:

    1.MySQL的“utf8mb4”是真正的“UTF-8”。

    2.MySQL的“utf8”是一种“专属的编码”,它能够编码的Unicode字符并不多。

    我要在这里澄清一下:所有在使用“utf8”的MySQL和MariaDB用户都应该改用“utf8mb4”,永远都不要再使用“utf8”。

    那么什么是编码?什么是UTF-8?

    我们都知道,计算机使用0和1来存储文本。比如字符“C”被存成“01000011”,那么计算机在显示这个字符时需要经过两个步骤:

    1.计算机读取“01000011”,得到数字67,因为67被编码成“01000011”。

    2.计算机在Unicode字符集中查找67,找到了“C”。

    同样的:

    1.我的电脑将“C”映射成Unicode字符集中的67。

    2.我的电脑将67编码成“01000011”,并发送给Web服务器。

    几乎所有的网络应用都使用了Unicode字符集,因为没有理由使用其他字符集。

    Unicode字符集包含了上百万个字符。最简单的编码是UTF-32,每个字符使用32位。这样做最简单,因为一直以来,计算机将32位视为数字,而计算机最在行的就是处理数字。但问题是,这样太浪费空间了。

    UTF-8可以节省空间,在UTF-8中,字符“C”只需要8位,一些不常用的字符,比如“”需要32位。其他的字符可能使用16位或24位。一篇类似本文这样的文章,如果使用UTF-8编码,占用的空间只有UTF-32的四分之一左右。

    MySQL的“utf8”字符集与其他程序不兼容,它所谓的“”,可能真的是一坨……

    MySQL简史

    为什么MySQL开发者会让“utf8”失效?我们或许可以从提交日志中寻找答案。

    MySQL从4.1版本开始支持UTF-8,也就是2003年,而今天使用的UTF-8标准(RFC 3629)是随后才出现的。

    旧版的UTF-8标准(RFC 2279)最多支持每个字符6个字节。2002年3月28日,MySQL开发者在第一个MySQL 4.1预览版中使用了RFC 2279。

    同年9月,他们对MySQL源代码进行了一次调整:“UTF8现在最多只支持3个字节的序列”。

    是谁提交了这些代码?他为什么要这样做?这个问题不得而知。在迁移到Git后(MySQL最开始使用的是BitKeeper),MySQL代码库中的很多提交者的名字都丢失了。2003年9月的邮件列表中也找不到可以解释这一变更的线索。

    不过我可以试着猜测一下。

    2002年,MySQL做出了一个决定:如果用户可以保证数据表的每一行都使用相同的字节数,那么MySQL就可以在性能方面来一个大提升。为此,用户需要将文本列定义为“CHAR”,每个“CHAR”列总是拥有相同数量的字符。如果插入的字符少于定义的数量,MySQL就会在后面填充空格,如果插入的字符超过了定义的数量,后面超出部分会被截断。

    MySQL开发者在最开始尝试UTF-8时使用了每个字符6个字节,CHAR(1)使用6个字节,CHAR(2)使用12个字节,并以此类推。

    应该说,他们最初的行为才是正确的,可惜这一版本一直没有发布。但是文档上却这么写了,而且广为流传,所有了解UTF-8的人都认同文档里写的东西。

    不过很显然,MySQL开发者或厂商担心会有用户做这两件事:

    1.使用CHAR定义列(在现在看来,CHAR已经是老古董了,但在那时,在MySQL中使用CHAR会更快,不过从2005年以后就不是这样子了)。

    2.将CHAR列的编码设置为“utf8”。

    我的猜测是MySQL开发者本来想帮助那些希望在空间和速度上双赢的用户,但他们搞砸了“utf8”编码。

    所以结果就是没有赢家。那些希望在空间和速度上双赢的用户,当他们在使用“utf8”的CHAR列时,实际上使用的空间比预期的更大,速度也比预期的慢。而想要正确性的用户,当他们使用“utf8”编码时,却无法保存像“”这样的字符。

    在这个不合法的字符集发布了之后,MySQL就无法修复它,因为这样需要要求所有用户重新构建他们的数据库。最终,MySQL在2010年重新发布了“utf8mb4”来支持真正的UTF-8。

    为什么这件事情会让人如此抓狂

    因为这个问题,我整整抓狂了一个礼拜。我被“utf8”愚弄了,花了很多时间才找到这个bug。但我一定不是唯一的一个,网络上几乎所有的文章都把“utf8”当成是真正的UTF-8。

    “utf8”只能算是个专有的字符集,它给我们带来了新问题,却一直没有得到解决。

    总结

    如果你在使用MySQL或MariaDB,不要用“utf8”编码,改用“utf8mb4”。这里( https://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4 )提供了一个指南用于将现有数据库的字符编码从“utf8”转成“utf8mb4”

    展开全文
  • 添加的作用是:指定字符的编码、解码格式。例如:mysql数据库用的是gbk编码,而项目数据库用的是utf-8编码。这时候如果添加了useUnicode=true&characterEncoding=UTF-8 ,那么作用有如下...

    我们在连接mysql数据库的时候一般都会在url后面添加useUnicode=true&characterEncoding=UTF-8 ,但是问什么要添加呢?

    添加的作用是:指定字符的编码、解码格式。

    例如:mysql数据库用的是gbk编码,而项目数据库用的是utf-8编码。这时候如果添加了useUnicode=true&characterEncoding=UTF-8 ,那么作用有如下两个方面:

    1. 存数据时:

    数据库在存放项目数据的时候会先用UTF-8格式将数据解码成字节码,然后再将解码后的字节码重新使用GBK编码存放到数据库中。

    2.取数据时:

    在从数据库中取数据的时候,数据库会先将数据库中的数据按GBK格式解码成字节码,然后再将解码后的字节码重新按UTF-8格式编码数据,最后再将数据返回给客户端。

    注意:在xml配置文件中配置数据库utl时,要使用&的转义字符也就是&

    例如:

    HTML中常用的特殊字符:

    最常用的字符实体(Character Entities)

    显示结果说明Entity NameEntity Number

    显示一个空格

    <

    小于

    <

    <

    >

    大于

    >

    >

    &

    &符号

    &

    &

    "

    双引号

    "

    "

    其他常用的字符实体(Character Entities)

    显示结果说明Entity NameEntity Number

    ©

    版权

    ©

    ©

    ®

    注册商标

    ®

    ®

    ×

    乘号

    ×

    ×

    ÷

    除号

    ÷

    ÷

    转自http://www.cnblogs.com/xuefuwu/archive/2012/05/06/2486577.html

    展开全文
  • 点击上方“java进阶架构师”,选择右上角“置顶公众号”20大进阶架构专题每日送达来源:https://dwz.cn/QS4wLyjh最近我遇到了一个bug,我试着通过Rails在以“utf8”编码MariaDB中保存一个UTF-8字符串,然后出现了一...
  • 所以,我在尝试从Latin1编码数据库,表格和列中过来时遇到了一些问题,现在一切都是UTF-8,我似乎无法更新列中一行.我试图用急性(é)替换“e”.但它给了我这个:ERROR 1366 (HY000): Incorrect string value: ‘\x82...
  • useUnicode=true&characterEncoding=UTF-8 的作用

    万次阅读 多人点赞 2019-01-21 15:02:56
    我们在连接mysql数据库的时候一般都会...添加的作用是:指定字符的编码、解码格式。  例如:mysql数据库用的是gbk编码,而项目数据库用的是utf-8编码。这时候如果添加了useUnicode=true&amp;characterEncodin...
  • #coding=utf-8的作用 还是乱码

    万次阅读 2017-08-21 23:37:18
    乱码产生原因是Python在读取时默认解码方式是用操作系统编码,如果和保存时...因为windows默认编码方式是GBK,python文件保存时使用了utf-8,在读取时,python使用GBK编码表去解utf-8编码字节码,因为GBK与UT
  • 是不是代表着本次连接所有 查询语句 按utf-8去编码 再传给mysql数据库服务器
  • mysql 连接url中useUnicode=true&characterEncoding=UTF-8 的作用 标签: mysqlurl数据库characterjdbcxml 2011-11-06 22:28 53427人阅读 评论(4) 收藏 举报 分类: java(54) ...
  • 最近遇到几个项目被MySQL的utf8编码坑,想起之前编码问题被坑惨痛教训,记录一下,警示自己。曾几何时,每次建库都选utf8,觉得自己比那些用乱七八糟编码人不知道酷到哪里去了。直到好多年前某次课程设计做...
  • 详细作用不多说,先上结果解释扩展与疑问? 不多说,先上结果 一般我们要创建一个Database,都是直接执行create database xxxx;,执行SQL语句show variables like "character%";会出现以下结果: character_set_...
  • characterEncoding=UTF-8",而添加这段话的作用是:指定字符的编码、解码格式。 比如:若mysql数据库用到 是GBK编码方式,而项目数据库用的是UTF-8编码方式。这时如果添加了"useUnicode=true&characterEncoding=...
  • html标签中的meta charset="utf-8" 的作用

    万次阅读 多人点赞 2018-09-01 10:13:00
    常见字符编码有:gb2312、gbk、unicode、utf-8。 各个字符编码含义: gb2312:代表国家标准第2312条,其中是不包含繁体(虽然咱们不怎么使用繁体了,但是台湾还在使用繁体啊。那怎么办呢?)。 gbk:国家标准...
  • characterEncoding=UTF-8的作用 我们在连接mysql数据库的时候一般都会在url后面添加useUnicode=true&amp;characterEncoding=UTF-8 ,但是问什么要添加呢? 添加的作用是:指定字符的编码、解码格式。 例如:...
  • 添加的作用是:指定字符的编码、解码格式。例如:mysql数据库用的是gbk编码,而项目数据库用的是utf-8编码。这时候如果添加了useUnicode=true&characterEncoding=UTF-8 ,那么作用有如下...
  • Lazarus 0.9.26中,涉及范围最广的的改变就是所有的的String默认都采用UTF8编码,IDE终于有了完全的UTF8支持,以前在源码编辑器中“吃掉”半个汉字情况不再出现。对于Linux下用户来说这也是好消息,大家终于可以...
  • 在python2中我们常常在文件头部写入 #encoding: utf-8 ...下面解释下这2个编码设置的作用 1. encoding: utf-8 #默认编码方式 2. sys.setdefaultencoding(“utf-8”) #默认解码方式 规则1 print 后面如果是uni...
  • Mysql 连接url中useUnicode=true&characterEncoding=UTF-8 的作用 我们在连接mysql数据库的时候一般都会在url后面添加useUnicode=true&characterEncoding=UTF-8 ,但是问什么要添加呢?   添加的作用是:指定...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,295
精华内容 2,518
关键字:

utf8的作用