2、设计函数,输入为一个字符串,里边包含中文、英文、数字等字符,编码为GBK。中文字符的编码规则假定为:双字节组成,高字节大于0x80,低字节任意。     a) 用常用语言(c/c++/php/java)编写函数,实现功能为:按顺序提取输入文本中的中文字符,形成新的文

转自:http://blog.csdn.net/risingsun001/article/details/9376249 为什么要了解MySql中UTF8 和 GBK 编码中文字符长度呢?举个例子,在oracle中用utf8 字段中文长度为1的话,需要char(3),mysql中则是char(1),如果你按照oracle的做法去创建mysql字段,是不是在mysql表中创建的长度大小与自己锁想的不一样呢,所以这个小知识点还是有必要了解的。 我在经过实验后得到以下结论(适用MySQL 5.0以上版本): 1.一个汉字占多少长度与编码有关:

UTF-8:一个汉字=3个字节

GBK:一个汉字=2个字节

2.在MySQL中 varchar(n)和char(n)表示n个字符,无论汉字和英文,Mysql都能存入n个字符,仅是实际字节长度有所区别

即 MySQL 并不会对超过长度的字符报错,而是直接截断了. 并且 char(2) 和 varchar(2) 都能存储 2个汉字,或者是两个英文字符.

3. MySQL 的 char(n) 和varchar(n) 可以直接存储 n 个汉字. 而不是 n/3或者 n/2 个,mysql 屏蔽了具体的存储细节,而直接以实际字符的个数来决定char存储的个数

提示:MySQL检查长度,可用SQL语言:

select LENGTH(fieldname) from tablename 和 select CHAR_LENGTH(fieldname) from tablename 来查看

说明:LENGTH 输出的结果是 字符实际长度的,而 CHAR_LENGTH输出的则是屏蔽了字符存储细节,是实际的字符个数!

注:在涉及中文环境下的php+mysql组合,最好是用 mb_strlen来检测字符长度, 而在mysql 中,使用 CHAR_LENGTH来检测字符长度,这样能做到中英文统一处理.

php中strlen和mb_strlen,count的区别:

strlen 计算字符串长度,一个中文当2字符;mb_strlen根据它的字符编码模式,统计字符;count计算数组中的元素数目或对象中的属性个数

下面我们来验证下我们的结论是否正确: 测试一: 首先,我们先来测试一下 php 把一个汉字认作几个字节: UTF8测试 [php]

view plain copy <?php

header("Content-type:text/html;charset=utf-8");

$string1="字";//定义中文字符变量

$string2="x";//定义英文字符变量

//直接输出看看他们的长度

echo strlen($string1);

echo "";

echo strlen($string2);

echo "";

//用 php 多字节扩展函数 mb_strlen试试看

echo mb_strlen($string1,'utf8');

echo "";

echo mb_strlen($string2,'utf8');

echo "";

?>

注:测试的时候请将test.php文件的编码也改为utf8 ,否则会出现strlen长度为2的情况,得不到正确的结果 输出: GBK测试: [php]

view plain copy <?php

header("Content-type:text/html;charset=gbk");

$string1="字";//定义中文字符变量

$string2="x";//定义英文字符变量

//直接输出看看他们的长度

echo strlen($string1);

echo "";

echo strlen($string2);

echo "";

//用 php 多字节扩展函数 mb_strlen试试看

echo mb_strlen($string1,'gbk');

echo "";

echo mb_strlen($string2,'gbk');

echo "";

?>

输出:

结论1.一个汉字占多少长度与编码有关:

UTF-8:一个汉字=3个字节

GBK:一个汉字=2个字节 测试二: 首先我们来测试UTF8 创建UTF8编码的数据库 [sql]

view plain copy CREATE DATABASE `testutf8` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

创建utf8编码的表test [sql]

view plain copy CREATE TABLE test(

txt_charchar( 2 ) NULL ,

txt_varchar varchar( 2 ) NULL

) ENGINE = MYISAM

确认表字段是否为utf8 插入两条记录: [sql]

view plain copy INSERT INTO test(txt_char,txt_varchar) VALUES ('abcdef','uvwxyz') , ('我是测试的','测试的是我');

插入结果:

创建test2表 [sql]

view plain copy CREATE TABLE `testutf8`.`test2` (

`txt_char` CHAR( 2 ) CHARACTER SET gbk COLLATE gbk_chinese_ci NOT NULL ,

`txt_varchar` VARCHAR( 2 ) CHARACTER SET gbk COLLATE gbk_chinese_ci NOT NULL

) ENGINE = MYISAM

确认表字段是否为gbk 插入两条记录: [sql]

view plain copy INSERT INTO test(txt_char,txt_varchar) VALUES ('abcdef','uvwxyz') , ('我是测试的','测试的是我');

插入结果: 结论二: 证明 mysql 并不会对超过长度的字符报错,而是直接截断了.

并且 char(2) 和 varchar(2) 都能存储 2个汉字,或者是两个英文字符.

证明 mysql 的 char(n) 可以直接存储 n 个汉字. 而不是 n/3 个

mysql 屏蔽了具体的存储细节,而直接以实际字符的个数来决定 char存储的个数 . 转自:http://wenda.tianya.cn/question/13b15725691c6c74 字符串的长度:

长度的单位为字符。一个多字节字符算作一个单字符。

MySQL字符串函数:

对于一个包含五个二字节字符集, LENGTH()返回值为 10, 而CHAR_LENGTH()的返回值为5。

也就是说:

对于一个汉字和一个字母都是一个字符。遵循CHAR和VARCHAR定义规范。也与数据库本身设置的字符集有关。

mysql的char和varchar字段不区分unicode还是别的什么编码,统统按照ascii来存,所以一个汉字占用2个字节。

CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。

CHAR和VARCHAR类型声明的长度表示你想要保存的最大字符数。例如,CHAR(30)可以占用30个字符。

CHAR列的长度固定为创建表时声明的长度。长度可以为从0到255的任何值。当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。

VARCHAR列中的值为可变长字符串。长度可以指定为0到65,535之间的值。(VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节)。 参考资料:http://www.mysqlpub.com/viewthread.php?tid=171&extra=page%3D1

mysql gbk编码 字节数_MySql中UTF8和GBK编码中文字符长度问题相关推荐

  1. mysql基础数据类型字节数_MySQL基础之数据类型

    1.整数类型 整数类型包括: 整数类型 字节数 无符号数的取值范围 有符号的取值范围 TINYIN 1 0~255 -128~127 SMALLINT 2 0~65535 -32768~32768 M ...

  2. mysql utf8 gbk_MySql中UTF8 和 GBK 编码中文字符长度问题

    为什么要了解MySql中UTF8 和 GBK 编码中文字符长度呢?举个例子,在oracle中用utf8 字段中文长度为1的话,需要char(3),mysql中则是char(1),如果你按照oracle ...

  3. mysql 一个中文占多少字节数_mysql里一个中文汉字占多少字节数?

    在mysql中,如果是latin1字符集下,一个中文汉字占2个字节数:如果是utf8字符集下,一个中文汉字占3个字节数:如果是gbk字符集下,一个中文汉字占2个字节数. (推荐教程:mysql视频教程 ...

  4. 解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)——ubuntu环境设置默认是utf-8,文件编码可使用Encodersoft批量转换

    解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)--ubuntu环境设置默认是utf-8,文件编码可使用Encodersoft批量转换 参考文章: (1)解决Qt中文乱码以及汉字编码的问题(U ...

  5. sqlserver中,如果正确得到中文的长度

    sqlserver中,如果正确得到中文的长度:             len('wangzhq')=7          len('代码')=2             正确:       data ...

  6. 中文字符匹配java_java正则匹配HTML中a标签里的中文字符示例

    java正则匹配HTML中a标签里的中文字符示例 发布于 2020-8-12| 复制链接 摘记: 本文实例讲述了java正则匹配HTML中a标签里的中文字符.分享给大家供大家参考,具体如下:今天群里一 ...

  7. mysql gbk编码 字节数,mysql中utf-8编码数据库转换成GBK编码的问题

    摘要 腾兴网为您分享:mysql中utf-8编码数据库转换成GBK编码的问题,之了课堂,易信,一折包邮,星球联盟等软件知识,以及七日杀,草莓软件,装修施工站,桔子会,桌面切换,看小说神器,酷派应用商店 ...

  8. mysql utf8 4位_mysql中utf8和utf8mb4区别

    MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode.好在utf8mb4是utf8的超集,除了将编码改为utf8mb4 ...

  9. mysql8中文排序_mysql中utf8编码的中文字段按拼音排序

    http://blog.s777n.net/orderbychinesefieldutf8/comment-page-2/ 2010-08-24 17:36 by TomorrowMan | 分类: ...

最新文章

  1. 和12岁小同志搞创客开发:手撕代码,做一款火焰报警器
  2. 【小白学PyTorch】10.pytorch常见运算详解
  3. 润乾报表新功能静态页面和report4包分离
  4. Struts2学习笔记(六):Struts2的处理流程与Action的管理方式
  5. mysql 从裤3523_MySQL出现3523错误分析
  6. python量化交易第一天_《Python量化交易教程》第一部分新手入门 第1天:谁来给我讲讲Python?...
  7. 常见的8个前端防御性编程方案
  8. P4047-[JSOI2010]部落划分【最小生成树】
  9. _临武县组合式桥梁伸缩缝F型伸缩缝—批发
  10. Uncaught (in promise) Error: timeout of 10000ms exceeded---SpringCloud Alibaba_若依微服务框架改造---工作笔记009
  11. ios开发网络学习九:NSURLSessionDownloadTask实现大文件下载
  12. springmvc网页找不到404_eclipse新建WebProject访问主页404错误的解决
  13. 【应用安全技术】浅谈安卓开发代码混淆技术
  14. 扎心一问:程序员还有未来吗?
  15. 被公司解雇怎么维护自己的权益看看这几部法《劳动法》《劳动合同法》及《劳动合同法实施条例》
  16. java安装教程win7_给win7系统搭建Java环境的详细教程(图文)
  17. Stratified k-foldTimeSeriesSplit
  18. 关于天魔传说试玩感受
  19. 百度地图离线API开发(真正的离线开发)
  20. RPA机器人批量处理excel

热门文章

  1. 线性代数-向量组的线性相关
  2. Verilog初级教程(4)Verilog中的标量与向量
  3. Linux平台设备框架驱动
  4. 一个页面两个或多个swiper vue中一个页面多个swiper互相干扰 swiper轮播冲突
  5. 杭电1099_杭电数学题合集
  6. matlab 保存当前图像,Matlab保存图像的方法总结
  7. 第七周项目5排队看病模拟
  8. 蓝背抠像 绿背抠像 算法,实时视频抠像算法 视频直播抠像
  9. 爱线段树的好孩子【九校2D1T3】优美序列
  10. ac自动机(模板+一点点小优化)