范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

技术分享

  作者:傅同学
  爱可生研发部成员,主要负责中间件产品开发,热衷技术原理。
  本文来源:原创投稿
  *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
  本公众号之前发表了一些关于MySQL字符集的文章: 从utf8转换成utf8mb4 、 字符集相关概念 、 有关SQL 语句 、 字符集注意事项 、 乱码问题.
  近日, 在为 爱可生开源数据传输工具dtle 增加UTF-32字符集支持过程中,笔者又了解了一下 MySQL 字符集机制。下面补充说明一些内容: 1 字符集ASCII 是最基础的字符集,每个 ASCII 字符占用1字节,ASCII 仅利用了8位编码能力的一半,最高位恒为 0 。 Latin1 字符集利用剩下的一半编码了西欧常用字母。 UCS-2 使用2字节编码,容量为65536 。 UTF-16 在这基础上, 增加了临时使用2个2字节,编码特殊字符的能力。 UTF-32 使用定长4字节编码。 GB 系列、UTF-8 等字符集,0~127编码和 ASCII 一样,使用单字节。在最高位不为0时,额外使用1~3字节编码。 即它们是变长编码,每个字符占用1~4字节
  只表达 ASCII 0~127字符的话,Latin1、GB系列、UTF8 等编码是完全相同的. 而 UTF16 和 UTF32 则会有额外的空白。 mysql> select          hex(convert("sql" using latin1)) as a,          hex(convert("sql" using gbk)) as b,          hex(convert("sql" using utf8mb4)) as c,          hex(convert("sql" using utf16)) as d,          hex(convert("sql" using utf32)) as e;  | a      | b      | c      | d            | e                        | +--------+--------+--------+--------------+--------------------------+ | 73716C | 73716C | 73716C | 00730071006C | 00000073000000710000006C |
  使用如下 SQL 语句可以看到当前 MySQL 实例支持的字符集(和collation)。 mysql> SELECT CHARACTER_SET_NAME, COLLATION_NAME, ID FROM INFORMATION_SCHEMA.COLLATIONS          ORDER BY CHARACTER_SET_NAME, ID; ... | gb18030            | gb18030_chinese_ci       | 248 | | gb18030            | gb18030_bin              | 249 | | gb18030            | gb18030_unicode_520_ci   | 250 | ... | utf8mb4            | utf8mb4_general_ci       |  45 | | utf8mb4            | utf8mb4_bin              |  46 | | utf8mb4            | utf8mb4_unicode_ci       | 224 | ... 题外:什么是 collation
  A collation is a set of rules that defines how to compare and sort character strings.
  MySQL文档: collation是进行字符串比较或排序时使用的规则. 例如: 大小写是否敏感( c ase  s ensitive /  i nsensitive) 特殊的相等规则:  ij = ij 2 MySQL 系列参数
  执行 SQL  show variables like "character%"  可以获得MySQL中关于字符集的几个参数。character_set_client character_set_connection character_set_results character_set_server -- 注: 下面3个参数一般无需关心 character_set_filesystem character_set_database character_set_system
  第06期:梳理 MySQL 字符集的相关概念 中" 六、字符集系统参数"一节进行了解释,但稍有误差。 2.1 参数 character_set_clientcharacter_set_client  并不是客户端使用的字符集.用户输入什么数据, 客户端就发送什么数据. 字符集由用户输入决定. character_set_client  是服务端的参数.服务端认为客户端发来的数据是以  character_set_client  编码的.
  character_set_client 不能被设置为以下几个字符集 (参考链接):ucs2 utf16 / utf16le utf32
  不难发现其共同点为: 都是多字节编码. 至于限制的原因本文不作展开。 2.2 参数 character_set_connection
  根据MySQL文档
  (after receiving them) The server converts statements sent by the client from  character_set_client  to character_set_connection . Exception: For string literals that have an introducer such as _utf8mb4  or _latin2 ...
  即收到客户端发来的语句后,服务端(mysqld)会将语句从 character_set_client 转换为character_set_connection 。(除了指明字符集的字符串字面量, 如 _utf8mb4"中文字符串" .)2.3 SET NAMES 语句mysql> SET NAMES gb2312;
  MySQL文档: 该语句设定3个关于 character set 的变量: character_set_client , character_set_connection  和 character_set_results . 该语句不设置  character_set_server  。
  注: MySQL客户端的 --default-character-set 参数效果和SET NAMES 语句一样。$ mysql -h ... --default-character-set=gb2312 3 一个乱码原因的勘误
  之前发表的 第09期:有关 MySQL 字符集的乱码问题 "一、转码失败"一节中有如下案例 -- 我的终端字符集是 utf8 ...  -- 新建立一个连接,客户端这边字符集为 gb2312 root@ytt-pc:/home/ytt# mysql --default-character-set=gb2312 ...  ... -- 表的字符集为 utf8 mysql> create database ytt_new10; mysql> create table ytt_new10.t1(a1 varchar(100)) charset utf8mb4;  -- 插入一条数据,有两条警告信息 mysql> insert into ytt_new10.t1 values ("病毒滚吧!"); Query OK, 1 row affected, 2 warnings (0.01 sec) ...  -- 那检索出来看到,数据已经不可逆的乱码了。 mysql> select * from ytt_new10.t1; | a1        | +-----------+ | ??? ??  |
  该文认为乱码原因是"客户端编码设置成和表编码不一致"。
  但可以发现:即使客户端和表的编码都是 gb2312 ,仍然会产生乱码。 -- 在上述gb2312 MySQL session中 mysql> create table ytt_new10.t2(a1 varchar(100)) charset gb2312; mysql> insert into ytt_new10.t2 values ("病毒滚吧!"); Query OK, 1 row affected, 2 warnings (0.02 sec)  mysql> select * from ytt_new10.t2; +------+ | a1   | +------+ |      |
  事实上,MySQL 知道 character_set_client = gb2312 ,也知道t1 表编码为utf8。写入过程中,MySQL 会进行转换,不应当发生乱码。
  发生乱码的真正原因是: 我们发送给 MySQL 的数据 ,并不是以 gb2312 编码的。是我们欺骗了 MySQL 。
  insert ... "("病毒滚吧!") 这个语句, 是以终端字符集 utf8 编码的. MySQL 把 utf8 数据当作 gb2312 数据, 转换成 utf8 数据, 自然产生了乱码.
  让我们以 gb2312 发送数据: # 终端编码为UTF-8. 使用iconv转换文件编码. $ echo "insert into ytt_new10.t1 val("病毒滚吧!");" | iconv -f utf8 -t gb2312 > insert-gb.txt $ cat insert-gb.txt # 终端无法正常显示GB2312字符 insert into t1 val("???????ɣ?"); $ mysql -h ... --default-character-set=gb2312 < insert-gbk.txt
  SELECT 时, MySQL 会把数据转换成 character_set_results 再返回给客户端. 终端可能不支持非 UTF8 字符的显示, 需要转换.$ mysql ... --default-character-set=utf8 -e "select * from ytt_new10.t1" 病毒滚吧! $ mysql ... --default-character-set=gb2312 -e "select..." | iconv -f gb2312 -t utf8 病毒滚吧! 4 字符集 client 到 connection转换的意义
  收到客户端发来的语句后, 服务端会将语句从  character_set_client  转换为 character_set_connection
  这个步骤乍一看多此一举 直接以 client 字符集执行, MySQL也会正常转换到表字符集.也可以让客户端直接以 connection 字符集发送语句.
  那么,为什么不将两个参数合并呢? 搜索发现, 使用转换层的潜在原因如下:
  不同字符集的某些行为是完全不同的 mysql> set character_set_connection = "utf8"; mysql> select length("hello"); |               5 |  mysql> set character_set_connection = "utf32"; mysql> select length("hello"); |              20 |
  由于 character_set_client 的限制,客户端不能直接以 UTF32 等字符集发送语句。如果我们就是想要 UTF32 下的行为(函数结果、排序规则等),就需要由 MySQL 进行一层转换。

旧电脑加装固态硬盘立马提升速度当电脑使用一两年后或者买的时候选的配置不带固态硬盘的,开机加载速度总是异常缓慢。此时可以新增加一块固态硬盘把系统迁移过去,你会发现之前的等待简直是浪费青春啊!下面就介绍具体的操作方ikbcS200Mini值得入手吗?S200Mini键盘评测这几天有幸被选为为了ikbcS200Mini的首批体验用户。2。4G无线连接TTC矮轴五阶段PBT双色键帽!作为一个对科技数码有着无限追求的热粉来说,在初期等待收货的时候,真的是望一键倾心!Lofree洛斐小浪蓝牙机械键盘给生活加点色彩生活中有些东西,用过后就再也回不去了很多朋友都会说出很多这样的神器,但如果是一款机械键盘,你会相信吗?很多时候都与工作打交道的机械键盘,更多的时候给人的标签大概有易损耗单调硬冷等,雷军成为时尚周刊第一人!这次还透露了一个小米的重要信息一提到国产手机,想必大家都是各有所好,但是性价比的代名词小米绝对是众多用户所喜爱的一个品牌,而小米集团创始人雷军我们也时常能在b站上看到他的鬼畜视频,就给人一种感觉,小米和雷军可以用20行代码创建一家保险公司,用30行代码创建一家银行用VanceSpencer自己的话来说,他真的对比特币没有那么深的兴趣。对于30岁的风险投资人来说,没有什么比探索建立在以太坊区块链之上的去中心化金融应用程序更令人兴奋的了。能够用西电常变产出首台安徽合肥紫蓬500千伏自耦变压器日前,西电常变为安徽合肥紫蓬500千伏输变电工程首台500千伏334兆伏安单相自耦变压器,在业主电力工业电气设备质量检验测试中心等委派的专家见证下通过了全面且严格的出厂试验项目考核无HiFi不音质!一圈四铁五单元BGVPDH5带来的发烧级耳机体验无线耳机凭借着独特的连接方式摆脱了线材的束缚,加上轻质便携外观时尚,成为了很多朋友日常通勤户外运动等的主力设备。相比之下,有线耳机多少会有些落下风,但有线耳机的音质要更胜一筹,尤其1970年代的那些事之一分粮食1983年之前的中国农村,还是计划经济的时代,农业生产农村生活都是以人民公社生产大队生产队组的形式来表现的。我是一个60后,我的童年就是从那个时候走过来的。今天就给大家说说农村分粮以不凡敬热爱!杰科4KUHD蓝光播放机G5700520倾情上市2021年杰科全新力作4KUHD蓝光播放机G5700踩着丘比特之箭,在这个充满爱的日子降临。以匠心致初心,以不凡敬热爱,我们把对用户的爱倾注在杰科G5700里,凝结成臻美4K画面,谁能完美运行手游天花板原神,这家媒体给出了答案最近,海外平台发布了9月份全球手游TOP10榜单,其中米哈游原神移动端全球收入超3。41亿美元,位列全球手游收入榜首。这款游戏的火爆,也一定程度拉高了手机行业用户的需求转变,前两年1970年代的那些事之四大麻油我们这里的方言习惯把蓖麻叫做大麻的,就是下面图中的这个植物。这是植株这是果实我记得小时候我们生产队会种很多这个东西,特别是好点的比较肥沃的地块的四周都要种植一圈,一个非常重要的作用
任正非路过华为实验室,发现高薪聘请的年轻工程师在打游戏任正非路过华为实验室,发现高薪聘请的年轻工程师在打游戏,推门问道电脑打游戏卡吗?工程师研发重地,非请勿进!一天,任正非路过华为EDA实验室,发现里面自己高薪聘请的年轻工程师在打游戏美院士一语中的,雷军官宣正式开始对标苹果在华为遭遇到断芯之前,在国内高端手机市场上,华为已经成功压制住了苹果,并且全球手机出货量紧随三星之后,已经成为全球数一数二的手机品牌。然而短短一年多的时间,华为的市场份额就已经只剩北京此百度非彼百度,烤肉店傍名牌被判3倍惩罚性赔偿百度搜索想必大家早已耳熟能详,但百度烤肉您可能还是头回听。有人也许会好奇什么,百度开始做烤肉了?非也,百度烤肉不仅与百度公司毫无关联,甚至还构成侵害商标权及不正当竞争。近日,北京知如果世界上所有的动物联手攻击人类,人类能否抵抗的住?世界上所有的动物联手攻击人类,人类能否抵抗住?都说人类是地球上的霸主,那么今天假设一个超丧的前提所有动物都联手攻击人类,当然人类也可以使出浑身解数来应对动物攻击,看看是否有胜算!人电视尺寸那么多,哪种才是最适合自己的?这里面有讲究这里是知科技,如果觉得本文有用,欢迎关注我。声明关注点赞附魔50学习经验加成(哈哈哈)先说结论预算范围内,尽可能选大的。如果你之前粗略了解过一些电视选购经验帖或者是去线下听导购推销华为WATCH3系列呼吸健康研究功能上线实现对肺部感染初步筛查IT之家12月21日消息,今年6月2日,华为WATCH3系列在华为新品发布会上正式亮相,华为WATCH3系列是一款专注续航生态健康三大方面的智能手表,这款手表的一大特色是支持呼吸健为什么苹果越卖越便宜,安卓越来越贵,内行人告诉你背后的原因其实要是说到苹果便宜,iPhoneXSMaxiPhone11Pro已经举手有话要说了。7000的价位相对中国平均工资收入来说,很贵了,一个月的工资收入不吃不喝能买得起,都是少数人。24h中概跟踪作者Len数据支持勾股大数据(www。gogudata。com)阿里云被暂停工信部网络安全威胁信息共享平台合作单位点评阿里云公司发现阿帕奇(Apache)Log4j2组件严重安全漏魅族大促,从3699降到2199,是时候伸出援助之手了转眼来到年底,主流手机厂商正在为新机做预热工作,接下来半个月,小米12Neo5s等都会悉数登场。除了发布新机之外,厂商也会在年终时候针对1旧款手机做降价促销活动,旨在尽快清理库存,在无人机摄影越来越普及的今天,单反拍风光是否越来越没前途?无人机和单反,都是摄影器材,二者的视角不一样,表现方式也不完全一样的。各自有各自的优势和发展空间,不存在谁会替代谁的问题。但我在摄影的时候,单反,数码后背和无人机,都会带。我的装备5G手机可以用4G的软件吗?是不是现在好多的软件都用不了?可以用4G与5G唯一的区别就在于网络速度,延迟更低。4G的速度是相当于100M宽带,5G速度相当于1000M宽带2G时代的交流多是文字。3G时代的交流多是图片语音文字。4G时代的交