精华内容
下载资源
问答
  • 数据库collation
    千次阅读
    2019-09-05 18:58:42

    mysql的collation大致的意思就是字符序。首先字符本来是不分大小的,那么对字符的>, = , < 操作就需要有个字符序的规则。collation做的就是这个事情,你可以对表进行字符序的设置,也可以单独对某个字段进行字符序的设置。一个字符类型,它的字符序有多个,比如:

    下面是UTF8对应的字符序。

    utf8_general_ci utf8    33  Yes Yes 1
    utf8_bin    utf8    83      Yes 1
    utf8_unicode_ci utf8    192     Yes 8
    utf8_icelandic_ci   utf8    193     Yes 8
    utf8_latvian_ci utf8    194     Yes 8
    utf8_romanian_ci    utf8    195     Yes 8
    utf8_slovenian_ci   utf8    196     Yes 8
    utf8_polish_ci  utf8    197     Yes 8
    utf8_estonian_ci    utf8    198     Yes 8
    utf8_spanish_ci utf8    199     Yes 8
    utf8_swedish_ci utf8    200     Yes 8
    utf8_turkish_ci utf8    201     Yes 8
    utf8_czech_ci   utf8    202     Yes 8
    utf8_danish_ci  utf8    203     Yes 8
    utf8_lithuanian_ci  utf8    204     Yes 8
    utf8_slovak_ci  utf8    205     Yes 8
    utf8_spanish2_ci    utf8    206     Yes 8
    utf8_roman_ci   utf8    207     Yes 8
    utf8_persian_ci utf8    208     Yes 8
    utf8_esperanto_ci   utf8    209     Yes 8
    utf8_hungarian_ci   utf8    210     Yes 8
    utf8_sinhala_ci utf8    211     Yes 8
    utf8_german2_ci utf8    212     Yes 8
    utf8_croatian_ci    utf8    213     Yes 8
    utf8_unicode_520_ci utf8    214     Yes 8
    utf8_vietnamese_ci  utf8    215     Yes 8
    utf8_general_mysql500_ci    utf8    223     Yes 1

    mysql的字符序遵从命名惯例。以_ci(表示大小写不敏感),以_cs(表示大小写敏感),以_bin(表示用编码值进行比较)。比如:

    CREATE TABLE `issue_message` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `content` varchar(255) NOT NULL,
      PRIMARY KEY (`id`),
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

    这个表下面的两个sql会出现同样的结果

    select * from issue_message where content = 'Yes'
    select * from issue_message where content = 'yes'

    如果改成下面的定义:

    CREATE TABLE `issue_message` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `content` varchar(255) NOT NULL COLLATE utf8_bin,
      PRIMARY KEY (`id`),
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

    那么两个sql结果就会不一样了

    所以,如果对字符大小敏感的话,最好将数据库中默认的utf8_general_ci设置为utf8_bin。

    转自:https://www.cnblogs.com/sonofelice/p/6432986.html

    更多相关内容
  • MYSQL数据库MySQL collation方法

    千次阅读 2021-03-03 21:00:56
    作者:VEPHP 时间 2017-09-15《MYSQL数据库MySQL collation方法》要点:本文介绍了MYSQL数据库MySQL collation方法,希望对您有用。如果有疑问,可以联系我们。问题是这样的:一张test的表,字符集采用的latin1....

    作者:VEPHP   时间 2017-09-15

    《MYSQL数据库MySQL collation方法》要点:

    本文介绍了MYSQL数据库MySQL collation方法,希望对您有用。如果有疑问,可以联系我们。问题是这样的:

    一张test的表,字符集采用的latin1.

    select to_id from test where to_id='cn象_王';

    +---------------+

    | to_id |

    +---------------+

    | cn陶_陶 |

    | cn象_王 |

    +---------------+

    2 rows in set (0.00 sec)

    取cn象_王的数据,居然把cn陶_陶的数据也取回来了.

    这显然是不允许的.

    查看它们的编码:

    (root@im_offlog1a)[test]> select hex('cn陶_陶');

    +----------------+

    | hex('cn陶_陶') |

    +----------------+

    | 636ECCD55FCCD5 |

    +----------------+

    1 row in set (0.00 sec)

    (root@im_offlog1a)[test]> select hex('cn象_王');

    +----------------+

    | hex('cn象_王') |

    +----------------+

    | 636ECFF35FCDF5 |

    +----------------+

    1 row in set (0.00 sec)

    编码的确是不一样的,但是为什么mysql会认为这两条记录是一样的呢?

    一开始我们就把问题定位于collation引起的问题.

    show variables查看

    | collation_connection | latin1_swedish_ci

    | collation_database | latin1_swedish_ci

    | collation_server | latin1_swedish_ci

    手工把这些参数修改为latin1_bin,结果居然一样.这下感觉真是奇怪了.

    这里先解释一下mysql collation的命名规则:

    它们以其相关的字符集名开始,通常包括一个语言名,并且以_ci(大小写不敏感)、_cs(大小写敏感)或_bin(二元)结束

    比如latin1字符集有以下几种校正规则:

    校对规则 含义

    latin1_german1_ci 德国DIN-1

    latin1_swedish_ci 瑞典/芬兰

    latin1_danish_ci 丹麦/挪威

    latin1_german2_ci 德国 DIN-2

    latin1_bin 符合latin1编码的二进制

    latin1_general_ci 多种语言(西欧)

    latin1_general_cs 多种语言(西欧ISO),大小写敏感

    latin1_spanish_ci 现代西班牙

    最后我们将表格重建,手工指定表格级别的collation为latin1_bin.

    这个问题就得到了解决.

    那么问题又来了,为什么我前面手工测试latin1_bin时不生效呢?

    原来MySQL按照下面的方式选择表字符集和 校对规则:

    如果指定了CHARACTER SET X和COLLATE Y,那么采用CHARACTER SET X和COLLATE Y.

    如果指定了CHARACTER SET X而没有指定COLLATE Y,那么采用CHARACTER SET X和CHARACTER SET X的默认校对规则.

    否则,采用服务器字符集和服务器校对规则.

    而我们在建表的时候指定了character set,所以它永远是采用对应的默认的校对规则.

    当然我们其实也没必要重建表格,只需要alter table db_allot CONVERT TO CHARACTER SET latin1 COLLATE latin1_bin这样转换即可.

    另外建议collation都尽量采用字符集相应的bin类型的校对规则,这样不容易出错.

    再说说我自己的体会

    觉得 character set latin1 collate latin1_bin 就是老版的 VARCHAR BINARY 的改进,只是新版的先用 character set 定字符集,再用此字符集名字加 _bin 定校对规则为二进制的,从而确保中文查询正确.

    再测试了一下,把此字段属性改为不带 BINARY 的

    ALTER TABLE `comment_content_1_01` CHANGE `thread` `thread` VARCHAR( 50 ) DEFAULT NULL

    然后再看表结构确实变成 `thread` varchar(50) default NULL, 即不带 character set latin1 collate latin1_bin 了,可见character set latin1 collate latin1_bin 就是老版的 VARCHAR BINARY 的改进.

    此外还读到更方便的做法,不用逐个改字段属性,而只要表格级别的collation为latin1_bin就行了.

    测试:

    alter table comment_content_1_01 CONVERT TO CHARACTER SET latin1 COLLATE latin1_bin

    后,

    再导出表结构

    CREATE TABLE comment_content_1_01 (

    content_id int(11) NOT NULL auto_increment,

    thread varchar(50) collate latin1_bin default NULL,

    uname varchar(100) collate latin1_bin default NULL,

    nick varchar(100) collate latin1_bin default NULL,

    uid int(11) unsigned default NULL,

    content text collate latin1_bin,

    post_time datetime default NULL,

    post_ip int(10) unsigned default NULL,

    `status` enum('unaudit','normal','deleted') collate latin1_bin NOT NULL default 'unaudit',

    PRIMARY KEY (content_id)

    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_bin;

    即便原来没定各字段的 collate,现在也全都是 collate latin1_bin 了.

    标签:

    展开全文
  • 有听过资料库的collation (校对)设定吗? 讲到collation,最常提到的就是英文大小写case sensitive 跟case insensitive. 安装SQL Server 资料库,instance level 的内定collation 设定是SQL_Latin1_General_CP1_CI...

    有听过资料库的collation (校对)设定吗?

    讲到collation,最常提到的就是英文大小写case sensitive 跟case insensitive. 安装SQL Server 资料库,instance level 的内定collation 设定是SQL_Latin1_General_CP1_CI_AS,就是case insensitive.

    常见的问题是可以在同一个SQL instance 下建立不同collation 的databases 吗?答案是可以的。

    请点击输入图片描述(最多18字)

    可以自己试看看喔。

    展开全文
  • 转自:https://www.cnblogs.com/sonofelice/p/6432986.htmlmysql新建数据库时的collation选择(转)转自别处的文章。末尾附原文链接mysql的collation大致的意思就是字符序。首先字符本来是不分大小的,那么对字符的>...

    转自:https://www.cnblogs.com/sonofelice/p/6432986.html

    mysql新建数据库时的collation选择(转)

    转自别处的文章。末尾附原文链接

    mysql的collation大致的意思就是字符序。首先字符本来是不分大小的,那么对字符的>, = , < 操作就需要有个字符序的规则。collation做的就是这个事情,你可以对表进行字符序的设置,也可以单独对某个字段进行字符序的设置。一个字符类型,它的字符序有多个,比如:

    下面是UTF8对应的字符序。

    utf8_general_ci utf8 33 Yes Yes 1

    utf8_bin utf8 83 Yes 1 utf8_unicode_ci utf8 192 Yes 8 utf8_icelandic_ci utf8 193 Yes 8 utf8_latvian_ci utf8 194 Yes 8 utf8_romanian_ci utf8 195 Yes 8 utf8_slovenian_ci utf8 196 Yes 8 utf8_polish_ci utf8 197 Yes 8 utf8_estonian_ci utf8 198 Yes 8 utf8_spanish_ci utf8 199 Yes 8 utf8_swedish_ci utf8 200 Yes 8 utf8_turkish_ci utf8 201 Yes 8 utf8_czech_ci utf8 202 Yes 8 utf8_danish_ci utf8 203 Yes 8 utf8_lithuanian_ci utf8 204 Yes 8 utf8_slovak_ci utf8 205 Yes 8 utf8_spanish2_ci utf8 206 Yes 8 utf8_roman_ci utf8 207 Yes 8 utf8_persian_ci utf8 208 Yes 8 utf8_esperanto_ci utf8 209 Yes 8 utf8_hungarian_ci utf8 210 Yes 8 utf8_sinhala_ci utf8 211 Yes 8 utf8_german2_ci utf8 212 Yes 8 utf8_croatian_ci utf8 213 Yes 8 utf8_unicode_520_ci utf8 214 Yes 8 utf8_vietnamese_ci utf8 215 Yes 8 utf8_general_mysql500_ci utf8 223 Yes 1

    mysql的字符序遵从命名惯例。以_ci(表示大小写不敏感),以_cs(表示大小写敏感),以_bin(表示用编码值进行比较)。比如:

    CREATE TABLE `issue_message` (

    `id` int(11) NOT NULL AUTO_INCREMENT, `content` varchar(255) NOT NULL, PRIMARY KEY (`id`), ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

    这个表下面的两个sql会出现同样的结果

    select * from issue_message where content = 'Yes' select * from issue_message where content = 'yes'

    如果改成下面的定义:

    CREATE TABLE `issue_message` (

    `id` int(11) NOT NULL AUTO_INCREMENT, `content` varchar(255) NOT NULL COLLATE utf8_bin, PRIMARY KEY (`id`), ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

    那么两个sql结果就会不一样了

    所以,如果对字符大小敏感的话,最好将数据库中默认的utf8_general_ci设置为utf8_bin。

    好文要顶

    关注我

    收藏该文

    1025cb5e7da8da149e62955c310c90e1.png 

    c06778070bd5dc57741b5ec768f4fe3c.png

    展开全文
  • 字符集和Collations的一般介绍一个character set (字符集)是一组符号和编码,而一个 collation 是在一个字符集里比较字符的一套规则,让我们通过一个虚构的字符集例子来说明区别。假设我们有个四个字母的字母表:`A'...
  • 企业内部有很多系统是繁体的,由于各方面的原因,公司目前正在实行简体化,但各...我们新的数据库均采用Chinese_PRC_BIN collation, 所以我们直接把旧系统备份一份,然后恢复到新的服务器上,同时更改数据库的collat...
  • ” 我查了一些资料,觉得可能是 数据库 Collation:SQL_Latin1_General_CP1_CI_AS 这里的原因,我想把这个字表的collation 改成 Chinese_PRC_CI_AS 但是尝试了很多种方法都失败 ,请高手指点下! 谢谢啦[img=...
  • 今天在创建数据库时发生了问题,新建数据库错误提示”Collation ‘<服务器默认值>’ is not valid.(Microsoft.SqlServer.Express.Smo)”,自己的系统环境为Windows 7 Ultimate英文版,不知为何?在我的一番...
  • 使用 mysql 创建数据表的时候, 总免不了要涉及到 character set 和 collation 的概念, 之前不是很了解。这两天不是很忙, 就自己整理了一下。先来看看 character set 和 collation 的是什么?&. character set...
  • mysql的default collation

    2019-12-26 15:09:56
    mysql的collation大致的意思就是字符序。首先字符本来是不分大小的,那么对字符的>, = , < 操作就需要有个字符序的规则。collation做的就是这个事情,你可以对表进行字符序的设置,也可以单独对某个字段进行...
  • SQL中的Collation是个什么鬼?

    万次阅读 2015-06-15 17:31:41
    一、说文解字,学习一下Collation的字面意思:排序。 (https://en.wikipedia.org/wiki/Collation) 二、SQL中的Collation,描述了如何对查询出来的数据进行比较和排序,本质是定义了两个cell的数据进行比较的时候...
  • 在建网站时,有时需要将一个数据库里的数据导入到另一个数据库里,但往往会出现二个数据库的编码不同,造成网页乱码。解决方法就是修改数据库编码。下面介绍一下如何修改MYSQL数据库编码的方法。方法/步骤首先下载一...
  • 主要介绍了WordPress导入数据库出现”Unknown collation: ‘utf8mb4_unicode_ci”错误的解决办法的相关资料,需要的朋友可以参考下
  • 以前用别人备份的sqlserver的srcipt在执行创建视图操作...--表 -- 列 三者的Collation字符排序集都改一遍才可以。 Cannot resolve the collation conflict between "Japanese_CI_AS" and "SQL_Latin1_General_CP1_CI_
  • 如果您未设定DB_LOCALE的值,则基于UnitedStatesEnglish,对于UNIX™的缺省的语言环。使用SETCOLLATION语句来指定该会话...响其他的会话,但您以非缺省的对照创建的数据库对象使用在他们创建时有效的任何对照顺序。...
  • 设置collation_database collation_server

    万次阅读 2016-11-19 13:20:31
    写入mysql数据库时tomcat报错:Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation ‘=数据库字符集的不相符的问题: 用navicat打开数据库的命令行: 如图: ...
  • SHOW COLLATION语法 SHOW COLLATION [LIKE 'pattern' | WHERE expr] 示例 -- 显示所有项 SHOW COLLATION; -- 显示 Collation字段值包含bin的项 SHOW COLLATION LIKE '%bin%'; -- 显示 Charset字段值等于utf8mb4...
  • mariadb(mysql)数据库字符集设置(centos7)
  • 由于安装的SQL Server 2005是中文版本,所以将“选项”中排序规则由给出的为默认值改为”Chinese_PRC_CI_AS”就OK了。
  • 经常发现同事爲了更改DB的Collation而删掉DB,重新创建过。其实,只要一条SQL就可以解,唔使哽麻烦!!
  • 环境:window 7+sqlserver 2008不同的电脑上的两个数据库DB1、DB2DB1数据库字符集: SQL_Latin1_General_CP1_CI_ASDB2数据库字符集: Chinese_Taiwan_Stroke_CI_AS从Excel中导入数据到临时表中,然后和数据库表中现有...
  • [MySQL][關聯式資料庫][DB]_語法教學#02__建立與刪除資料庫,_簡單說明Character與Collation的選
  • 如果您未设定DB_LOCALE的值,则基于UnitedStatesEnglish,对于UNIX™的缺省的语言环。使用SETCOLLATION语句来指定该会话...响其他的会话,但您以非缺省的对照创建的数据库对象使用在他们创建时有效的任何对照顺序。...
  • wordpress(4.6版本)转移空间时,导入新空间数据库时出现了#1273 – Unknown collation: ‘utf8mb4_unicode_ci’ 的错误,这是数据库编码的问题,查了网上的一些资料,出现这个问题的原因在于,wordpress4.2版本之后...
  • MYSQL WORKBENCH创建数据库和表

    千次阅读 2016-05-17 15:23:08
    MySQL Workbench 就是 MySQL 官方 为 MySQL 提供的一款可视化管理工具,MySQL Workbench 下载页: ... 1、启动mysql workbench,链接数据库。  菜单database-connect to database,打开local i

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 60,945
精华内容 24,378
关键字:

数据库collation