墨墨导读:字符集是一组符号和编码。collation是一组用于比较字符集中的字符的规则。
上面错误意思是 mysql 数据库中 name 字段插入不正确的字符串值。name 字段是记录微信呢称,设计之出没有考虑到微信呢称中使用 Emoji 表情,导致写入数据失败。
Unicode是编码字符集,而UTF-8就是字符编码,即Unicode规则字库的一种实现形式。随着互联网的发展,对同一字库集的要求越来越迫切,Unicode标准也就自然而然的出现。它几乎涵盖了各个国家语言可能出现的符号和文字,并将为他们编号。
背景 今天遇到一个Mysql插入用户信息时报错的问题,报错信息如下 java.sql.SQLException: Incorrect string value: '\xF0\x9F\x90\xB8' for column 'userName' at row 1 原因 原因是用户的userName这里录入了emoji表情🐷,而要插入的表中定义的字符集是utf8。 mysql的utf8编码的一个字符最多3个字节,但是一个emoji表情为4个字节,所以utf8不支持存储emoji表情。 但是utf8的超集utf8
1. MySQL的版本 utf8mb4的最低mysql版本支持版本为5.5.3+,若不是,请升级到较新版本。 2.修改MySQL配置文件 修改mysql配置文件my.cnf(windows为my.ini) my.cnf一般在etc/mysql/my.cnf位置。找到后请在以下三部分里添加如下内容: [client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4' 3. 重启数据库,检查变量 SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%'; Variable_name Value character_set_client utf8mb4 character_set_connection utf8mb4 character_set_database utf8mb4 character_set_filesystem binary character_set_results utf8mb4 character_set_server utf8mb4 character_set_system utf8 collation_connection utf8mb4_unicode_ci collation_database utf8mb4_unicode_ci collation_server utf8mb4_unicode_ci collation_connection 、collation_database 、collation_server是什么没关系。 但必须保证这几个变量必须是utf8mb4。 系统变量 描述 character_set_client (客户端来源数据使用的字符集) character_set_connection (连接层字符集) character_set_database (当前选中数据库的默认字符集) character_set_results (查询结果字符集) character_set_server (默认的内部操作字符集) ———————————————————— 到这里为止,上面都是服务器环境方面配置调整 ———————————————————— 4. 将数据库、表、列三个同时也转换成utf8mb4 更改数据库编码:ALTER DATAbase alfredsw CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; 更改表编码:ALTER TABLE TABLE_NAME CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; 更改列编码:在需要存储的字段进行更改 [注意:数据库和表编码可以不更改,不影响使用] 5、服务器连接排序规则:utf8mb4_general_ci 6、最关键的,thinkphp5的配置要修改 'charset' =>'utf8mb4',// 数据库编码默认采用utf8
在日常处理客户的问题中,会遇到非常多的客户反馈字符乱码的问题,遇到这类型的问题,我们要怎么去处理呢?又该怎么去引导用户去解决呢?
之前做的SQL审核工具不支持text类型的字段的,今天一个业务方问我为什么不支持text字段,大概给他讲了讲,后续发现可能还有些不完善的地方,这里总结一下text的用法,先来看看官方文档上对这个字段的解释:
数据库(Database)就是按照数据结构来组织,存储和管理数据的仓库 专业的数据库是专门对数据进行创建,访问,管理,搜索等操作的软件,比起我们自己用文件读写的方式对象数据进行管理更加的方便,快速,安全
数据库是mysql 向数据库insert数据的时候,一直显示这个错误,在网上查找了许多相关,大致的问题是: 1:所存储的数据与数据库表的字段类型定义不相匹配. 2:字段类型是否正确, 是否越界, 有无把一种类型的数据存储到另一种数据类型中. 3:写的SQL语句里列的数目和后面的值的数目不一致。 经过检查后并不是以上问题产生, 而是字符集问题,导致insert发生错误了, 后来试过设置数据库编码和项目编码统一为utf-8,仍然解决不了问题 。 最后发现,假设数据库的默认字符集是GBK,假设创建了表 table,那么table的字符集是GBK, 之后再设置数据库的字符集为utf-8,如图下显示:
如何修改mysql数据库编码 修改字符集的方法,就是使用mysql的命令 mysql> SET character_set_client = utf8 ; mysql> SET character_set_connection = utf8 ; 使用 mysql> SHOW VARIABLES LIKE 'character%';查看,发现数据库编码均已改成utf8 +--------------------------+---------------------------------+ | Variable_name | &#118alue | +--------------------------+---------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | D:"mysql-5.0.37"share"charsets" | +--------------------------+---------------------------------+
1.[库选项] 数据库的相关属性 字符集: charset 字符集 校对集: collate 校对集
这里还有一个mysql字符乱码的例子,部署redmine过程中,mysql数据库使用了默认的字符集,导致含有中文内容为乱码。
参考: http://www.th7.cn/db/mysql/201412/84636.shtml
show create table user1 \G(\G:格式化显示,把不需要的符号去掉)
先讲一下写该文章的原因,首先,工作中又遇到一条很熟悉的MySQL报错信息 Cause: java.sql.SQLException: Incorrect string value:Cause: java.sql.SQLException: Incorrect string value… (emoji表情存储导致),原因是MySQL的字符集导致的;其次,因为一直听说数据库变更可能锁表,但是一直不知道到底哪些操作会导致锁表。所以今天对相关知识做一个系统的整理。
13.创建一innodb GBK表test,字段id int(4)和namevarchar(16)
con = cx_Oracle.connect("pythondemo","welcome","192.168.188.11:1521/std1")
mysql -uroot -poldboy -S /data/3306/mysql.sock
root是mysql的最高权限用户,和Linux的root概念一样。默认情况下,mysql的root用户密码是空的,可以直接登录。但是这样不安全,所以要设置密码。
本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
关于编码问题前面一共整理4篇博客,这是终篇。我使用MySQL时经常会遇到乱码问题,尤其是涉及到中文和emoji表情符号时,然而当我查询资料时发现大多数资料几乎雷同,寥寥几句仅贴了几个参数的定义,并没有案例来详细说明,因此我利用几个周末时间整理出这个编码系列博客,希望能对和我同样深受编码困扰的人提供些帮助,当然能力有限,里面很多观点是我根据各种资料的推测,并没有在相关文档中找到确切的描述佐证,可能有理解偏颇之处。
mysqladmin drop databasename 删除数据库前,有提示。
学习MySQL时间也不短了,一直习惯于增删改查。近期,系统学习了一下DDL,简单总结一下DDL中的增删改查……
创建数据库时,显式指定字符集和排序规则,同时,当切换到当前数据库后,参数 character_set_database,collation_database 分别被覆盖为当前显式指定的字符集和排序规则。举个简单例子,创建数据库 ytt_new2,显式指定字符集为 latin1,同时排序规则为 latin1_bin。之后在切换到数据库 ytt_new2 后,对应的系统参数也被修改。
ProxySQL整合MGR提供高可用,是我们知数堂课程中提供一个MySQL高可用的解决方案,架构如下:
我们需要更改改动mysql配置文件/etc/my.cnf并加入如下的参数。(Linux环境下)
启动/关闭 启动(以管理员模式运行命令行) net start mysql 关闭(以管理员模式运行命令行) net stop mysql 登录/退出 登录 mysql -u"用户名" -p"密码" 登录格式二 mysql -h"ip地址" -u"用户名" -p"密码" 退出 exit 图形化界面 Navicat SQLyog 当然,我个人是不建议使用SQLyog的,推荐使用Navicat,因为Navicat真的很强大 SQL语句分类 什么是SQL语句 结构化查询语言(Structured Query La
修改Varchar 的大小的时候。不用锁表,就可以进行操作DDL。这个还得具体查看版本,还有具体情况。下来我们来看一下INnoDB中的Online DDL各个操作请求。
mysqli_affected_rows() 返回上一次 MySQL 操作所影响的记录行数。 mysqli_autocommit() 打开或关闭自动提交数据库修改。 mysqli_change_user() 更改指定数据库连接的用户。 mysqli_character_set_name() 返回数据库连接的默认字符集。 mysqli_close() 关闭先前打开的数据库连接。 mysqli_commit() 提交事务。 mysqli_connect_errno() 返回上一次连接错误的错误代码。 mysql
我们都知道,MySQL中关于字符,有char和varchar两种常用的类型,可能在平时的使用过程中,大家不会去关心这两种类型的区别,只是会用就可以了,或者说看到过一些它们的区别,但是没有时间去测试,今天有时间了,我将这两种类型的具体情况实验一把,让大家直观感受下,纯属分享,大神请绕道。
create database if not exists tlxy default charset=utf8;
爱可生 DBA 团队成员,主要负责 MySQL 故障处理和 SQL 审核优化。对技术执着,为客户负责。
本来村民也是打算写一写基础教程的,但是 B 站 UP 主高新强的系列视频 —— MySQL8零基础入门视频教程 十分照顾初学者,正适合新手村。村民看下来之后觉得很不错,视频内容比较全面,分 P 目录详细,示范操作讲解细致,因此就推荐给大家,但村民也会根据自己的实际需求按照视频的分P标题写一点分享,大家在观看视频的时候可以把村民的教程放在一边进行对照。
MySQL 支持多种字符集,使您能够使用各种字符集存储数据,并根据给定排序规则执行比较。
字符指计算机中保存的各种文字和符号,包括各种国家的文字、标点符号、图形符号、数字等。由于计算机采用二进制保存数据,用户输入的字符将会按照一定的规则转换成二进制后保存,这个过程就是字符编码,将一系列字符的编码规则组合起来就形成了字符集。
根据以往经验应该是字段长度不够,才会触发这样的报错,于是排查了数据库中表的字段长度
最近在完成一个线上日志修复工作的过程中遇到了一个意想不到的慢查询。当时使用的SQL以及表结构其实都很简单,而且在关键的字段上也有索引,但是MySQL的执行计划就是跑出来了Range checked for each record (index map: 0x1)。如下为问题中的表结构定义和执行计划(删减了其他字段,留下了关键的部分):
在创建完数据库和表之后,需要插入模拟数据。在插入的过程中就碰到了问题,此文作为记录解决字符集的问题
“数据库的数据变成乱码了!”---想必不少 DBA 们对类似的“呼救”不算太陌生。一般来说这类问题都是字符集的设置有关,同时在 MySQL 中也存在“错入错出”的这种“神话”:登录到数据库看的时候是乱码,代码/WEB 上显示的是正常的。
create database if not exists tlxy default charset=utf8;
在 MySQL 中,系统支持诸多字符集,不同字符集之间也略有区别。目前最常用的字符集应该是 utf8 和 utf8mb4 了,相比于 utf8 ,utf8mb4 支持存储 emoji 表情,使用范围更广。本篇文章将会介绍 utf8 修改成 utf8mb4 字符集的方法。
SHOW TABLES FROM 数据库名 直接写SHOW TABLES,查看的是当前使用数据库下的表
整数类型可分为五种:TINYINT/SMALLINT/MEDIUMINT/INT/BIGINT
mysql在创建数据库的时候,字符集设置的不是utf8而是utf9mb4,在导入sql脚本的时候,发现提示如下错误:
在平时的mysql运维操作中,经常会碰到插入中文字段后出现乱码的情况,产生中文乱码的原因一般有: 1)mysql的编码格式不对,是latin1编码。强烈推荐将mysql下的编码格式都改为utf8,因为它兼容世界上所有字符! 2)mysql的表的语系设定问题(包含character与collation) 3)客户端程式(例如php)的连线语系设定问题
MySQL定义VARCHAR(M)最多可以是65535个字节,M表示的是「字符数量」,但是实际存储中并不能存储那么多字节。如果一个字段超过了65535个字节,可以选择使用TEXT或者BLOB类型。
又很久没有写博客了 这篇笔记是边学边记的 当时比较仓促 所以有的地方可能会比较乱 但是大概的方法写的还是比较清楚了 等有时间回头再好好整理一下这篇文章。
领取专属 10元无门槛券
手把手带您无忧上云