mysql中文编码

关于mysql数据库的中文编码

 

mysql> show variables like 'character_set_%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

上面的这条语句可以很清晰的看到但前数据库使用的一些编码,其中character_set_database;明确的指出默认的事一个latin1的一种编码格式,致使我们在字段李存储中文时会碰到一些问题,下面我把解决的集中方法记录一下。

1.第一种是直接针对需要改动的表,在创建表结构时直接指定需要的编码

mysql> show create table t;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                               |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t     | CREATE TABLE `t` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

  在使用show create table时可以直观的看到创建表时指定的编码,此时直接在建表语句后改为,或者加上:charset=utf8;可以直接指定这张表的字符编码,此方法只对当前表有效,但简单方便。

 

2.第二中方法是在当次连接中,直接改动创建数据库的编码格式,只对当次连接有效,如果重启mysql服务器,编码重置为之前。

SET character_set_database = utf8 ;

执行完后再查看下编码状况,看看是否已经改成utf8编码了。

3.第三种方法相当于把第二种的修改持久化,把指定编码的语句写入配置文件中。

 /etc/mysql/my.cnf


    [client]
    default-character-set=utf8

    [mysqld]
    default-storage-engine=INNODB
    character-set-server=utf8
    collation-server=utf8_general_ci

修改my.cnf后重启mysql服务器就能发现修改了。

 

后记:

        以上的所有修改都不能对已有的数据库或表做更改,是的,改完编码后该重建库的建库,该重建表的建表。

还有:

        关于mysql服务重启的一些问题:如果mysql服务没有添加到service的话,想直接通过service mysql restart是行不通的,需要直接找到mysql服务的所在目录;因该是这个 /etc/init.d/    。然后就可以用./mysql restart了,或者你要先stop再start也没问题,当然,直接重启能解决一切问题。

 

 

12/23

一些其它记录 :https://blog.csdn.net/Life_android/article/details/56512606

最近项目需要,把my.ini中的默认字符集修改成了utf8mb4,后来当我再改回成utf8的时候,发现MySQL无法正常启动了!

MySQL报错: Found option without preceding group in config file:XXX; Fatal error in defaults handling.

 

困惑了一下午,最后终于解决了,原来是在你my.ini文件保存格式的问题:正常情况应该是ANSI/ASCII格式的,但是你会发现自己的my.ini文件格式竟然被默认改成了utf8格式的。

解决方法:

用记事本打开my.ini文件,然后点击:文件-->另存为-->将编码修改为:ANSI-->保存!

 

mysqld --defaults-file="my.ini"


mysqld --install mysql --defaults-file="C:\install\mysql\mysql-8.0.16-winx64\my.ini"

 

last、一些配置

[mysqld]
# 设置3306端口
port=3307
# 设置mysql的安装目录
basedir= E:\mariadb-10.3.7-winx64
# 设置mysql数据库的数据的存放目录
datadir= E:\mariadb-10.3.7-winx64\data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3307

default-character-set=utf8

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值