首页 > 数据库 >msql中字符集与校对规则

msql中字符集与校对规则

时间:2022-12-16 19:33:09浏览次数:79  
标签:DEFAULT db 数据库 字符集 msql MySQL 校对 CREATE

在 MySQL 中,可以使用 CREATE DATABASE 语句创建数据库,语法格式如下:

  1. CREATE DATABASE [IF NOT EXISTS] <数据库名>
  2. [[DEFAULT] CHARACTER SET <字符集名>] 
  3. [[DEFAULT] COLLATE <校对规则名>];
[ ]中的内容是可选的。语法说明如下:
  • <数据库名>:创建数据库的名称。MySQL 的数据存储区将以目录方式表示 MySQL 数据库,因此数据库名称必须符合操作系统的文件夹命名规则,不能以数字开头,尽量要有实际意义。注意在 MySQL 中不区分大小写。
  • IF NOT EXISTS:在创建数据库之前进行判断,只有该数据库目前尚不存在时才能执行操作。此选项可以用来避免数据库已经存在而重复创建的错误。
  • [DEFAULT] CHARACTER SET:指定数据库的字符集。指定字符集的目的是为了避免在数据库中存储的数据出现乱码的情况。如果在创建数据库时不指定字符集,那么就使用系统的默认字符集。
  • [DEFAULT] COLLATE:指定字符集的默认校对规则。

MySQL 的字符集(CHARACTER)和校对规则(COLLATION)是两个不同的概念。字符集是用来定义 MySQL 存储字符串的方式,校对规则定义了比较字符串的方式。后面我们会单独讲解 MySQL 的字符集和校对规则。

实例1:最简单的创建 MySQL 数据库的语句

在 MySQL 中创建一个名为 test_db 的数据库。在 MySQL 命令行客户端输入 SQL 语句CREATE DATABASE test_db;即可创建一个数据库,输入的 SQL 语句与执行结果如下。
mysql> CREATE DATABASE test_db;
Query OK, 1 row affected (0.12 sec);
“Query OK, 1 row affected (0.12 sec);”提示中,“Query OK”表示上面的命令执行成功,“1 row affected”表示操作只影响了数据库中一行的记录,“0.12 sec”则记录了操作执行的时间。

若再次输入CREATE DATABASE test_db;语句,则系统会给出错误提示信息,如下所示:
mysql> CREATE DATABASE test_db;
ERROR 1007 (HY000): Can't create database 'test_db'; database exists
提示不能创建“test_db”数据库,数据库已存在。MySQL 不允许在同一系统下创建两个相同名称的数据库。

可以加上IF NOT EXISTS从句,就可以避免类似错误,如下所示:
mysql> CREATE DATABASE IF NOT EXISTS test_db;
Query OK, 1 row affected (0.12 sec)

实例2:创建 MySQL 数据库时指定字符集和校对规则

使用 MySQL 命令行工具创建一个测试数据库,命名为 test_db_char,指定其默认字符集为 utf8,默认校对规则为 utf8_chinese_ci(简体中文,不区分大小写),输入的 SQL 语句与执行结果如下所示:
  1. mysql> CREATE DATABASE IF NOT EXISTS test_db_char
  2. -> DEFAULT CHARACTER SET utf8
  3. -> DEFAULT COLLATE utf8_chinese_ci;
  4. Query OK, 1 row affected (0.03 sec)
这时,可以使用SHOW CREATE DATABASE查看 test_db_char 数据库的定义声明,发现该数据库的指定字符集为 utf8,运行结果如下所示:
mysql> SHOW CREATE DATABASE test_db_char;
+--------------+-----------------------------------------------------+
| Database     | Create Database                                     |
+--------------+-----------------------------------------------------+
| test_db_char | CREATE DATABASE `test_db_char` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+--------------+-----------------------------------------------------+
1 row in set (0.00 sec)

“1 row in set (0.00 sec)”表示集合中有 1 行信息,处理时间为 0.00秒。时间为 0.00 秒并不代表没有花费时间,而是时间非常短,小于 0.01 秒。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

创建数据库表
CREATE TABLE IF NOT EXISTS `student`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8


注意点:

表名和字段尽量使用``括起来

AUTO_INCREMENT 代表自增

所有的语句后面加逗号,最后一个不加

字符串使用单引号括起来

主键的声明一般放在最后,便于查看

不设置字符集编码的话,会使用MySQL默认的字符集编码Latin1,不支持中文,可以在my.ini里修改

常用命令:

SHOW CREATE DATABASE 数据库名;-- 查看创建数据库的语句
SHOW CREATE TABLE 表名;-- 查看表的定义语句
DESC 表名;-- 显示表的具体结构

show databases; --查看当前所有的数据库
use 数据库名; --打开指定的数据库
show tables; --查看所有的表
describe/desc 表名; --显示表的信息
create database 数据库名; --创建一个数据库
exit --退出连接


-- --单行注释
# --单行注释
/*...*/ --多行注释



数据库存储引擎
INNODB

默认使用,安全性高,支持事务的处理,多表多用户操作
MYISAM

早些年使用,节约空间,速度较快

 

标签:DEFAULT,db,数据库,字符集,msql,MySQL,校对,CREATE
From: https://www.cnblogs.com/qingzhen/p/16988164.html

相关文章

  • 解决Zabbix数据库中表的字符集或排序规则不受支持的问题
    前言:在使用最新版zabbix(6.2)通过docker镜像来部署,结果页面告警“Zabbix数据库中表的字符集或排序规则不受支持***后面一堆数据表及字段”;解决方案:1:调整数据库字符集和排......
  • MySQL的字符集配置
      utf8的锅:场景 :之前在给客户做微商城时,需要保存微信的授权信息,此时就有一个nickname字段,在设计数据表时,潜意识的将表的存储格式设置为utf8,生产上线一段时间后偶尔出现......
  • HTML 编码(字符集)
    为了正确显示HTML页面,Web浏览器必须知道要使用哪个字符集。从ASCII到UTF-8ASCII是第一个字符编码标准。ASCII定义了128种可以在互联网上使用的字符:数字(0-9)、英......
  • c++中的字符集与中文(宽字符)
    首先要来说一说字符集和编码的关系,这两者既有交叉、又有异同。​​https://www.runoob.com/w3cnote/charset-encoding.html​​就非西欧字符而言,比如中国以及港澳台......
  • CStdioFile在UNICODE字符集下读写中文
    问题以CFile::typeBinary的形式读写包含中文的文件,未出现乱码。以CFile::typeText方式读写,分两种情况:在多字节字符集下,使用CStdioFile::ReadString读取包含中文的文件,正常;......
  • 字符集和排序规则
    字符集我们可以为MySQL服务器、数据库、表、字符类型的字段以及字符串常量指定一个字符集(CharacterSet)和排序规则(Collation)。其中,字符集决定了能够存储哪些字符,比如AS......
  • 分享 ASCII 字符集的字模
    是做VGA显示屏时用到的,这是字模资源:gitee链接以下为字模代码://133*16*8字模的parameterparameter[7:0]C_ascii_character[2127:0]={0x00,0x00,0......
  • oracle19c 修改字符集
    环境:centos7.6oracle19c修改过程:shutdownimmediate;startupmount;ALTERSYSTEMENABLERESTRICTEDSESSION;ALTERSYSTEMSETJOB_QUEUE_PROCESSES=0;ALTE......
  • mysql字符集utf8和utf8mb4的使用问题
    一、MySQL中length()、char_length()的区别和用法char_length(str)计算单位:字符不管汉字还是数字或者是字母都算是一个字符length(str)计算单位:字节utf8编码:一个汉字三个字......
  • mysql 所有 表 字段 批量修改为utf8mb4字符集
    之前数据很多都是utf8不支持表情零零碎碎改了一部分总是有问题需要全部修改为utf8mb4相较原文章修改了一点点条件加了数据库和不为utf8mb4的筛选#改变字段数据SE......