精华内容
下载资源
问答
  • 如何将整个MySQL数据库字符集和排序规则转换为UTF-8
    2021-01-19 06:22:49

    在命令行shell上

    如果您是命令行shell,您可以非常快地完成这一任务。只需填写“dbname”:dDB="dbname"(

    echo 'ALTER DATABASE `'"$DB"'` CHARACTER SET utf8 COLLATE utf8_general_ci;'

    mysql "$DB" -e "SHOW TABLES" --batch --skip-column-names \

    | xargs -I{} echo 'ALTER TABLE `'{}'` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;') \| mysql "$DB"

    用于简单复制/粘贴的单衬垫DB="dbname"; ( echo 'ALTER DATABASE `'"$DB"'` CHARACTER SET utf8 COLLATE utf8_general_ci;'; mysql "$DB" -e "SHOW TABLES" --batch

    --skip-column-names | xargs -I{} echo 'ALTER TABLE `'{}'` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;' ) | mysql "$DB"

    更多相关内容
  • COLLATE utf8_general_ci:数据库校对规则。 ci是case insensitive的缩写,意思是大小写不敏感;相对的是cs,即case sensitive,大小写敏感; 还有一种是utf8_bin,是将字符串中的每一个字符用二进制数据存储,区分...
    • DEFAULT CHARACTER SET utf8:数据库字符集。设置数据库的默认编码为utf8,utf8中间不要"-";
    • COLLATE utf8_general_ci:数据库校对规则。
      ci是case insensitive的缩写,意思是大小写不敏感;相对的是cs,即case sensitive,大小写敏感;
      还有一种是utf8_bin,是将字符串中的每一个字符用二进制数据存储,区分大小写。
    • 如果建表的时候选择的是区别大小写的规则而查询的时候又暂时不想区别, 可以用类似 WHERE column_name COLLATE utf8_general_ci = ‘xxx’ 的写法改变查询使用的校对规则,新建数据 库时一般选用utf8_general_ci就可以了。
    • 每一个数据库有一个数据库字符集和一个数据库校对规则,它不能够为空。CREATE DATABASE 和 ALTER DATABASE语句有一个可选的子句来指定数据库字符集和校对规则:
    CREATE DATABASE db_name 
    [[DEFAULT] CHARACTER SET charset_name] 
    [[DEFAULT] COLLATE collation_name]
    
    ALTER DATABASE db_name 
    [[DEFAULT] CHARACTER SET charset_name] 
    [[DEFAULT] COLLATE collation_name]
    
    • 如果指定了CHARACTER SET X和COLLATE Y,那么采用字符集X和校对规则Y。 如果指定了CHARACTER SET X而没有指定COLLATE Y,那么采用CHARACTER SET X和CHARACTER SET X的默认校对规则。如果在CREATE TABLE语句中没有指定表字符集和校对规则,则使用数据库字符集和校对规则作为默认值。

    分别修改数据库,表,字段编码:

    ALTER DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE  utf8_general_ci 
    ALTER TABLE tbl_name DEFAULT CHARACTER SET utf8 COLLATE  utf8_general_ci 
    ALTER TABLE tbl_name CHANGE ’column_name’ ’column_name’ 类型 CHARACTER SET utf8 COLLATE utf8_general_ci
    把表默认的字符集和所有字符列(CHAR,VARCHAR,TEXT)改为新的字符集:
    ALTER TABLE tbl_name CONVERT TO CHARACTER SET character_name CHARACTER SET utf8 COLLATE utf8_general_ci 
    

    查看数据库编码:
    SHOW CREATE DATABASE db_name;
    查看表编码:
    SHOW CREATE TABLE tb_name;
    查看字段编码:
    SHOW FULL COLUMNS FROM tb_name;

    示例:

    CREATE TABLE `U_USER_TAG_REF` (
      `username` varchar(40) character set utf8 COLLATE utf8_bin NOT NULL,
      `tags` varchar(1024) DEFAULT NULL,
      PRIMARY KEY (`username`)
    ) ENGINE=InnoDB DEFAULT CHARSET=gbk;
    
    展开全文
  • 文章目录一、MySQL常用排序规则简介二、修改字符集及排序规则1.修改表字符集及排序规则2.修改字段字符集及排序规则 一、MySQL常用排序规则简介 UTF-8是使用1~4个字节,一种变长的编码格式,字符编码。mb4即 most ...

    一、MySQL常用排序规则简介

    UTF-8是使用1~4个字节,一种变长的编码格式,字符编码。mb4即 most bytes 4,使用4个字节来表示完整的UTF-8。

    mysql的 utf8 编码最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了。三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文种平面(BMP)。也就是说,任何不在基本多文本平面的 Unicode字符,都无法使用 Mysql 的 utf8 字符集存储。包括 Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和很多不常用的汉字,以及任何新增的 Unicode 字符等等。

    总结:MySQL的utf8是utfmb3,只有三个字节,节省空间但不能表达全部的UTF-8。所以推荐使用utf8mb4。

    MySQL常用排序规则utf8mb4_general_ci、utf8mb4_unicode_ci、utf8mb4_bin
    ci即case insensitive,不区分大小写。
    utf8mb4_unicode_ci
    是基于标准的Unicode来排序和比较,能够在各种语言之间精确排序,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。
    utf8mb4_general_ci
    是一个遗留的 校对规则,不支持扩展,它仅能够在字符之间进行逐个比较。utf8_general_ci校对规则进行的比较速度很快,但是与使用 utf8mb4_unicode_ci的校对规则相比,比较正确性较差。
    utf8mb4_bin
    将字符串每个字符用二进制数据编译存储,区分大小写,而且可以存二进制的内容。

    参考:

    Mysql的utf8与utf8mb4区别,utf8mb4_bin、utf8mb4_general_ci、utf8mb4_unicode_ci区别

    记一次排序规则utf8_genera_ci与utf8mb4_bin的区别引发的数据丢失问题

    二、修改字符集及排序规则

    1.修改表字符集及排序规则

    SELECT
    	CONCAT( 'ALTER TABLE ', TABLE_NAME, ' DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;' ) 
    FROM
    	information_schema.`TABLES` 
    WHERE
    	TABLE_SCHEMA = 'cas';
    

    示例SQL

    ALTER TABLE `cas`.`user_info` 
    DEFAULT CHARACTER SET = utf8mb4, COLLATE = utf8mb4_bin;
    

    2.修改字段字符集及排序规则

    SELECT
    	CONCAT(
    		'ALTER TABLE `',
    		table_name,
    		'` MODIFY `',
    		column_name,
    		'` ',
    		DATA_TYPE,
    		'(',
    		CHARACTER_MAXIMUM_LENGTH,
    		') CHARACTER SET utf8mb4 COLLATE utf8mb4_bin',
    		( CASE WHEN IS_NULLABLE = 'NO' THEN ' NOT NULL' ELSE '' END ),
    		';' 
    ) 
    FROM
    	information_schema.COLUMNS 
    WHERE
    	TABLE_SCHEMA = 'cas' 
    	AND table_name = 'user_info' 
    	AND DATA_TYPE = 'varchar' 
    	AND ( CHARACTER_SET_NAME != 'utf8mb4' OR COLLATION_NAME != 'utf8mb4_bin' );
    

    注意:以上生成DDL语句的SQL,会导致字段注释和默认值丢失,请自行优化,正确的SQL如下。

    示例SQL

    ALTER TABLE `cas`.`user_info` 
    CHANGE COLUMN `username` `username` VARCHAR(255) CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_bin' NOT NULL DEFAULT '00' COMMENT '用户名' ;
    

    参考:
    MySQL批量修改数据表的字符集及字段字符集

    展开全文
  • 使用mysql数据库新建数据库的时候要指定字符集和排序规则。最常用的字符集为utf8。但是utf8字符集对应的排序规则却有差别。 排序规则utf8_bin与utf8_general_ci区别 MySQL中存在多种格式的utf8编码,其中最常见的...

    使用mysql数据库新建数据库的时候要指定字符集和排序规则。最常用的字符集为utf8。但是utf8字符集对应的排序规则却有差别。
    在这里插入图片描述

    排序规则: utf8_bin与utf8_general_ci区别
    MySQL中存在多种格式的utf8编码,其中最常见的两种为:
    utf8_bin
    utf8_general_ci

    utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写;
    utf8_genera_ci不区分大小写,ci为case insensitive的缩写,即大小写不敏感,为utf8默认编码。
    ci是 case insensitive, 即 “大小写不敏感”, a 和 A 会在字符判断中会被当做一样的;
    bin 是二进制, a 和 A 会别区别对待.
    例如你运行:SELECT * FROM table WHERE field = ‘a’
    那么在utf8_bin中你就找不到 field = ‘A’ 的那一行, 而 utf8_general_ci 则可以.

    展开全文
  • 用了这么长时间,发现...那么在utf8_bin中你就找不到 txt = ‘A’ 的那一行, 而 utf8_general_ci 则可以. utf8_general_ci 不区分大小写,这个你在注册用户名和邮箱的时候就要使用。 utf8_general_cs 区分大小写,如果
  • utf8_bin 将字符串中的每个字符用二进制存储,区分大小写。 utf8_general_ci 表中的字段不区分大小写 例如要查task任务表中task_code字段。 设置为utf8_general_ci的字段就可以查出01003YYY这个大写字母的数据 ...
  • 因为utf8字符集是目前最适合于实现多种... #注意后面这句话 “COLLATE utf8_general_ci”,大致意思是在排序时根据utf8校验集来排序 #那么在这个数据库下创建的所有数据表的默认字符集都会是utf8了 mysql>create table
  • 参考:《MySQL字符集与排序规则总结》 一、说说字符集、字符集编码和排序规则 字符集:罗列所有图形字符的一张大表。 比如: GBK字符集(中国制造): 罗列了所有的中文简体、繁体字的一张大表。 Unicode字符集...
  • 27、创建数据库时,排序规则和编码规则 1、常用的就是utf8+utf8_general_ci utf8和utfmb4区别: utfmb4 兼容 utf8 且可以显示更多的字符,一般都用不到,选择utfmb4,只会浪费空间,通常,我们都是用的utf8; 排序 ...
  • MySQL utf8mb4排序规则

    千次阅读 2021-01-19 17:36:24
    文章直通车:utf8mb4 和 utf8utf8mb4排序规则一、先了解下 utf8mb4 和 utf8参考MySQL文档:utf8mb4: A UTF-8 encoding of the Unicode character set using one to four bytes per character.utf8mb3: A UTF-8 ...
  • 我们以前的程序员在一个表(mysql)中设置了错误的排序规则。...mysql alter table排序规则可能重复更改数据库排序规则: ZZU1更改表排序规则: ZZU1更改列排序规则: ZZU1更多信息:utf8-general和utf8-u...
  • create database database default character set utf8mb4 collate utf8mb4_general_ci;
  • 查看数据库字符集mysql> show charset;+----------+-----------------------------+---------------------+--------+| Charset | Description | Default collation | Maxlen |+----------+-----------...
  • 从您的数据库中清除html字符,更改数据库存储引擎,选择排序规则类型或将文本转换为UTF-8或任何其他编码。 完全可配置的过滤器选项。 该脚本主要用于数据库迁移和更改数据库以最终支持UTF-8和其他编码类型。
  • MySQL新建数据库|字符集&排序规则

    千次阅读 2020-05-27 22:34:26
    排序规则前言分析字符集utf8mb4和utf8其他字符集排序规则ci结尾ca结尾bin结尾乱序问题 前言 有过新建过的数据库的小伙伴对这张图肯定不陌生了,但关于字符集和排序规则一般是直接忽略呢,还是有去了解,然后根据...
  • 场景描述:项目采用了分库模式进行不同业务的开发,在共有的功能模块进行设计的时候采用主从库,或者各分库之中存在同样的库表结构,在使用过程中做库表同步的时候一定要保证库表所在的数据库的字符集和编码格式是...
  • 23.2. 排序规则支持 排序规则特性允许指定每一列甚至每一个操作的数据的排序顺序和字符分类行为。这放松了数据库的LC_COLLATE和LC_CTYPE设置自创建以后就不能更改这一限制。 23.2.1. 概念 在概念上,一种可排序数据...
  • mysql数据库表的排序规则
  • 解决的办法就是设置包含中文的字符集,例如常见的utf-8utf8mb4。 字符集 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。所以就要使用到字符集,讲二进制代码转化为对应的字符。 1、...
  • Mysql 数据库排序规则

    千次阅读 2021-01-18 20:54:45
    前言:在新建MySQL数据库或表的时候经常会选择字符集和排序规则数据库用的字符集大家都知道是怎么回事,那排序规则是什么呢?排序规则:是指对指定字符集下不同字符的比较规则。其特征有以下几点:(1)两个不同的...
  • Mysql字符集和排序规则 - UTF8mb4 520

    千次阅读 2021-01-28 08:52:34
    问题:由于缺少排序规则,mysqldump将无法导入1273 - 未知排序规则:'utf8mb4_unicode_520_ci'Mysql服务器是(来自phpMyAdmin):Server version: 5.5.40 - MySQL CommunityServer charset: UTF-8 Unicode (utf8)...
  • MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。 最新的 UTF-8 规范只使用一到四个字节,最大能编码21位,正好能够表示所有的 17个 Unicode 平面。 mysql支持...
  • SELECT a.table_name, concat('ALTER TABLE ', a.table_schema, '.', a.table_name, ' DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci, ', group_concat(distinct(concat(' MODIFY ', column_...
  • 恢复数据库时找不到排序规则

    千次阅读 2021-12-03 15:34:16
    目录 环境 症状 问题原因 解决方案 环境 系统平台:Microsoft Windows (64-bit) 10,Linux x86-64 Red Hat Enterprise ...因linux系统版本的数据库中自带的排序规则很多,而windows环境下自带的排序规则如下: 因为在
  • mysql 创建utf-8数据库

    千次阅读 2021-01-25 17:27:26
    MariaDB创建,更改,删除数据库命令1234567创建新的MySQL数据库创建具有特定字符集的MySQL数据库(UTF8)删除现有的MySQL数据库仅在不存在的情况下创建MySQL数据库仅当存在MySQL数据库时才会丢失更改db.opt的数据库...
  • MySQL 数据库基本使用 mysql 数据库创建与密码重置 ① 数据库登录与密码设置 ② 数据库创建并指定编码和排序规则 ③ 切换数据库 ④ 删除数据库 ⑤ 创建用户 ⑥ 给用户授权
  • 新的项目启动后,创建数据库使用的一般需要创建默认字符集(CHARACTER)和排序规则(COLLATE)。以下是我创建表使用的字符集和排序规则。CREATE DATABASE `spring...字符集排序规则utf8utf8_general_ciutf8_unicode_...
  • 一般我们会选择字符集为utf-8 在我们创建表的时候,也可以指定需要的字符集 create table test( column1 int, column2 varchar(20) ) default character set hebrew 如果不指定字符集的话,那么就会使用数据库的...
  • Navicat建数据库时字符集与排序规则说明一、字符集说明二、排序规则说明 一、字符集说明 一般选择utf8。 下面介绍一下utf8utf8mb4的区别:  utf8mb4兼容utf8,且比utf8能表示更多的字符。至于什么时候用,看你的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,878
精华内容 15,551
关键字:

数据库utf8排序规则