mysql 5.5+版本支持emoji表情符存储方法

合集下载

mysql5.5 安装详细图解

mysql5.5 安装详细图解

最近在做一个Java Web带有数据库的项目,用过SQL Server 2005,但是对它印象不太好因为安装的时候出错还恢复了系统,十分伤心,后来打算用MySQL 5.5.27使使看。

安装环境:Windows 7 家庭普通版[64bit ]版本信息:MySQL 5.5.27 [下载地址:官方网站/downloads/中关村在线ZQL应用下载/detail/4/33431.shtml]参考文献:/doc/refman/5.1/zh/installing.html步骤1:选择安装类型有3种安装类型:Typical(典型安装)、Complete(完全安装)和Custom(定制安装)。

Typical(典型安装)安装只安装MySQL服务器、mysql命令行客户端和命令行实用程序。

命令行客户端和实用程序包括mysqldump、myisamchk和其它几个工具来帮助你管理MySQL 服务器。

Complete(完全安装)安装将安装软件包内包含的所有组件。

完全安装软件包包括的组件包括嵌入式服务器库、基准套件、支持脚本和文档。

Custom(定制安装)安装允许你完全控制你想要安装的软件包和安装路径。

我选择的是“Custom”步骤2:定制安装对话框所有可用组件列入定制安装对话框左侧的树状视图内。

未安装的组件用红色X 图标表示;已经安装的组件有灰色图标。

要想更改组件,点击该组件的图标并从下拉列表中选择新的选项。

可以点击安装路径右侧的Change...按钮来更改默认安装路径。

选择了安装组件和安装路径后,点击Next按钮进入确认对话框。

我全都安了,没有叉。

路径改成了D:\MySQL\MySQL Server 5.5\步骤3:选择配置类型可以选择两种配置类型:Detailed Configuration(详细配置)和Standard Configuration(标准配置)。

Standard Configuration(标准配置)选项适合想要快速启动MySQL而不必考虑服务器配置的新用户。

mysqlunsigned用法

mysqlunsigned用法

mysqlunsigned用法MySQL中Unsigned是一种数据类型修饰符,它可以用来指定一个列或变量的数据类型为无符号整数类型。

Unsigned的作用是将有符号整数的取值范围从负数扩展到正数,使得该列或变量能够表示更大的非负整数。

在MySQL中,Unsigned可以用于以下数据类型:1. TINYINT:表示一个范围为0到255的整数。

2. SMALLINT:表示一个范围为0到65535的整数。

3. MEDIUMINT:表示一个范围为0到16777215的整数。

4. INT:表示一个范围为0到4294967295的整数。

5. BIGINT:表示一个范围为0到18446744073709551615的整数。

Unsigned类型以u或U结尾,例如TINYINT UNSIGNED。

Unsigned类型在一些场景下非常有用,例如存储IP地址或者存储一些大的时间戳,因为它们都是非负整数,而且Unsigned类型的列或变量占用的存储空间比有符号整数类型的列或变量少一半,这意味着更少的磁盘空间和更快的数据读写速度。

Unsigned类型的使用也有一些限制。

首先,Unsigned类型不能存储负数,因此如果需要存储负数,应该使用有符号整数类型。

其次,如果一个Unsigned类型的列或变量被赋值了一个负数,MySQL将会将它转换为一个对应的无符号整数,这可能会导致一些意想不到的结果。

因此,在使用Unsigned类型时,应该特别小心。

下面是一个Unsigned类型的实例:CREATE TABLE test (id INT UNSIGNED NOT NULL PRIMARY KEY,name VARCHAR(50) NOT NULL);在上面的示例中,id列被指定为Unsigned类型的INT整数,因此它只能存储非负整数。

注意,在定义Unsigned类型的列或变量时,关键词UNSIGNED必须放在数据类型后面,而且不能与NOT NULL一起使用。

解决Python插入数据到MySQL时遇到的Incorrectstringvalue错误

解决Python插入数据到MySQL时遇到的Incorrectstringvalue错误

解决Python插⼊数据到MySQL时遇到的Incorrectstringvalue错误问题与原因使⽤python执⾏插⼊语句将数据插⼊到MySQL时抛出了以下异常pymysql.err.InternalError: (1366, "Incorrect string value: '\\xF0\\x9F\\x91\\x8D, ...' for column 'content' at row 1")以上错误是由编码问题造成的,你使⽤的数据库默认编码是utf8,可以保存1到3个字节,但是你插⼊到数据库中的字符串包含emoji表情字符(占⽤4个字节),因此会抛出Incorrect string value异常。

解决⽅法解决的⽅法主要有以下两种修改MySQL的编码格式在程序中过滤emoji表情字符修改MySQL的编码格式MySQL从5.5.3版本开始,才⽀持4个字节的utf8编码,编码名称是utf8mb4(mb4意思为max bytes 4),在MySQL中执⾏以下SQL语句可以看到utf8和utf8mb4的相关信息SELECT * FROM information_schema.CHARACTER_SETSWHERE CHARACTER_SET_NAME LIKE 'utf8%'结果如下CHARACTER_SET_NAME DEFAULT_COLLATE_NAME DESCRIPTION MAXLENutf8utf8_general_ci UTF-8 Unicode3utf8mb4utf8mb4_general_ci UTF-8 Unicode4因此,将MySQL编码改为utf8mb4就可以解决这个问题。

解决程序的编码问题需要进⾏以下⼏个操作:修改f配置找到MySQL的配置⽂件f(windows系统⼀般在MySQL的安装⽬录中,linux系统放在/etc⽬录下)修改含有utf8编码的参数为utf8mb4,如下character-set-server=utf8mb4[client]default-character-set=utf8mb4[mysql]default-character-set=utf8mb4修改保存后,重启MySQL。

一步步教会你微信小程序的登录鉴权

一步步教会你微信小程序的登录鉴权

⼀步步教会你微信⼩程序的登录鉴权前⾔为了⽅便⼩程序应⽤使⽤微信登录态进⾏授权登录,微信⼩程序提供了登录授权的开放接⼝。

乍⼀看⽂档,感觉⽂档上讲的⾮常有道理,但是实现起来⼜真的是摸不着头脑,不知道如何管理和维护登录态。

本⽂就来⼿把⼿的教会⼤家在业务⾥如何接⼊和维护微信登录态,下⾯话不多说了,来⼀起看看详细的介绍吧。

接⼊流程这⾥官⽅⽂档上的流程图已经⾜够清晰,我们直接就该图展开详述和补充。

⾸先⼤家看到这张图,肯定会注意到⼩程序进⾏通信交互的不⽌是⼩程序前端和我们⾃⼰的服务端,微信第三⽅服务端也参与其中,那么微信服务端在其中扮演着怎样的⾓⾊呢?我们⼀起来串⼀遍登录鉴权的流程就明⽩了。

1. 调⽤wx.login⽣成codewx.login()这个API的作⽤就是为当前⽤户⽣成⼀个临时的登录凭证,这个临时登录凭证的有效期只有五分钟。

我们拿到这个登录凭证后就可以进⾏下⼀步操作:获取 openid 和 session_keywx.login({success: function(loginRes) {if (loginRes.code) {// example: 081LXytJ1Xq1Y40sg3uJ1FWntJ1LXyth}}});2. 获取openid和session_key我们先来介绍下openid,⽤过公众号的童鞋应该对这个标识都不陌⽣了,在公众平台⾥,⽤来标识每个⽤户在订阅号、服务号、⼩程序这三种不同应⽤的唯⼀标识,也就是说每个⽤户在每个应⽤的openid都是不⼀致的,所以在⼩程序⾥,我们可以⽤openid来标识⽤户的唯⼀性。

参数值appid⼩程序的appidsecret⼩程序的secretjs_code前⾯调⽤wx.login派发的codegrant_type'authorization_code'从这⼏个参数,我们可以看出,要请求这个接⼝必须先调⽤wx.login()来获取到⽤户当前会话的code。

mysql保存微信昵称特殊字符的方法

mysql保存微信昵称特殊字符的方法

mysql保存微信昵称特殊字符的⽅法我在⽤mysql 保存微信昵称,当插⼊昵称数据的时候,报错。

于是做了如下⼯作:⼀、简介MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门⽤来兼容四字节的unicode。

好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。

当然,为了节省空间,⼀般情况下使⽤utf8也就够了。

⼆、内容描述那上⾯说了既然utf8能够存下⼤部分中⽂汉字,那为什么还要使⽤utf8mb4呢? 原来mysql⽀持的 utf8 编码最⼤字符长度为 3 字节,如果遇到 4 字节的宽字符就会插⼊异常了。

三个字节的 UTF-8 最⼤能编码的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多⽂种平⾯(BMP)。

也就是说,任何不在基本多⽂本平⾯的 Unicode字符,都⽆法使⽤ Mysql 的 utf8 字符集存储。

包括 Emoji 表情(Emoji 是⼀种特殊的 Unicode 编码,常见于 ios 和 android ⼿机上),和很多不常⽤的汉字,以及任何新增的Unicode 字符等等。

三、问题根源最初的 UTF-8 格式使⽤⼀⾄六个字节,最⼤能编码 31 位字符。

最新的 UTF-8 规范只使⽤⼀到四个字节,最⼤能编码21位,正好能够表⽰所有的 17个 Unicode 平⾯。

utf8 是 Mysql 中的⼀种字符集,只⽀持最长三个字节的 UTF-8字符,也就是 Unicode 中的基本多⽂本平⾯。

Mysql 中的 utf8 为什么只⽀持持最长三个字节的 UTF-8字符呢?我想了⼀下,可能是因为 Mysql 刚开始开发那会,Unicode 还没有辅助平⾯这⼀说呢。

那时候,Unicode 委员会还做着 “65535 个字符⾜够全世界⽤了”的美梦。

Mysql 中的字符串长度算的是字符数⽽⾮字节数,对于 CHAR 数据类型来说,需要为字符串保留⾜够的长。

java-将评论内容过滤特殊表情emoj符号,保存到mysql中

java-将评论内容过滤特殊表情emoj符号,保存到mysql中

java-将评论内容过滤特殊表情emoj符号,保存到mysql中正常操作评论,保存时,若评论内容含有特殊表情符号,后台将报错如下:Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation '='; nested exception is java.sql.SQLException: Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation '='后来查阅资料,找到⽅法将其评论内容中特殊符号过滤掉,然后保存。

废话不多说,直接上代码:1/**2 * 检测是否有emoji字符3 * @param source4 * @return⼀旦含有就抛出5*/6public static boolean containsEmoji(String source) {7if (StringUtils.isBlank(source)) {8return false;9 }1011int len = source.length();1213for (int i = 0; i < len; i++) {14char codePoint = source.charAt(i);1516if (isEmojiCharacter(codePoint)) {17//do nothing,判断到了这⾥表明,确认有表情字符18return true;19 }20 }2122return false;23 }2425private static boolean isEmojiCharacter(char codePoint) {26return (codePoint == 0x0) ||27 (codePoint == 0x9) ||28 (codePoint == 0xA) ||29 (codePoint == 0xD) ||30 ((codePoint >= 0x20) && (codePoint <= 0xD7FF)) ||31 ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) ||32 ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));33 }3435/**36 * 过滤emoji 或者其他⾮⽂字类型的字符37 * @param source38 * @return39*/40public static String filterEmoji(String source) {4142if (!containsEmoji(source)) {43return source;//如果不包含,直接返回44 }45//到这⾥铁定包含46 StringBuilder buf = null;4748int len = source.length();4950for (int i = 0; i < len; i++) {51char codePoint = source.charAt(i);5253if (isEmojiCharacter(codePoint)) {54if (buf == null) {55 buf = new StringBuilder(source.length());56 }5758 buf.append(codePoint);59 } else {60 }61 }6263if (buf == null) {64return source;//如果没有找到 emoji表情,则返回源字符串65 } else {66if (buf.length() == len) {//这⾥的意义在于尽可能少的toString,因为会重新⽣成字符串67 buf = null;68return source;69 } else {70return buf.toString();71 }72 }7374 } Java Code。

mysql中Incorrectstringvalue乱码问题解决方案

mysql中Incorrectstringvalue乱码问题解决⽅案mysql中Incorrect string value乱码问题解决⽅案你是否遇到过类似以下错误?java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x9C' for column 'content' at row 1.产⽣这种异常的原因在于,mysql中的utf8编码最多会⽤3个字节存储⼀个字符,如果⼀个字符的utf8编码占⽤4个字节(最常见的就是ios中的emoji表情字符),那么在写⼊数据库时就会报错。

mysql从5.5.3版本开始,才⽀持4字节的utf8编码,编码名称为utf8mb4(mb4的意思是max bytes 4),这种编码⽅式最多⽤4个字节存储⼀个字符。

要想证明这个问题,可以执⾏以下sql:select * frominformation_schema.CHARACTER_SETSwhere CHARACTER_SET_NAME like 'utf8%'结果如图:因此,要解决上述异常的发⽣,需要使⽤utf8mb4编码。

解决数据库编码后,还需要解决客户端Connection连接对象使⽤的编码问题。

调⽤创建的Connection对象执⾏以下sql:conn.createStatement().execute("SET names 'utf8mb4'");如果项⽬中使⽤了DataSource数据源,只需要对数据源进⾏相关配置即可,这⾥以apache的DBCP数据源为例讲解,在spring框架下配置如下:<!-- 数据源 --><bean id="dataSource" class="mons.dbcp.BasicDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"></property><property name="url" value="jdbc:mysql://${${data-source.prefix}.data-source.host-name}:3306/${${data-source.prefix}.data-source.db-name}?characterEncoding=utf8&amp;autoReconnect=true&amp;failOverReadOnly=false&amp;maxReconnec <property name="username" value="${${data-source.prefix}ername}" /><property name="password" value="${${data-source.prefix}.data-source.password}" /><property name="maxActive" value="150" /><property name="maxIdle" value="2" /><property name="testOnBorrow" value="true" /><property name="testOnReturn" value="true" /><property name="testWhileIdle" value="true" /><property name="validationQuery" value="select 1" /><!-- 此配置⽤于在创建Connection对象时执⾏指定的初始化sql --><property name="connectionInitSqls"><list><value>set names 'utf8mb4'</value></list></property></bean>以下解释引⽤⾃mysql参考⼿册:SET NAMES 'charset_name'SET NAMES显⽰客户端发送的SQL语句中使⽤什么字符集。

mysql字符集查看、修改utf8mb4

mysql字符集查看、修改utf8mb4⼀、查看字符集1.查看MYSQL数据库服务器和数据库字符集⽅法⼀:show variables like '%character%';⽅法⼆:show variables like 'collation%';mysql> show variables like '%character%';+--------------------------+--------------------------------------+| Variable_name | Value |+--------------------------+--------------------------------------+| 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 | /usr/local/mysql5535/share/charsets/ |+--------------------------+--------------------------------------+8 rows in set (0.00 sec)utf8mb4 已成为 MySQL 8.0 的默认字符集,在MySQL 8.0.1及更⾼版本中将 utf8mb4_0900_ai_ci 作为默认排序规则。

新项⽬只考虑 utf8mb4UTF-8 编码是⼀种变长的编码机制,可以⽤1~4个字节存储字符。

详解MySQL查询时区分字符串中字母大小写的方法

详解MySQL查询时区分字符串中字母⼤⼩写的⽅法如果你在mysql有唯⼀约束的列上插⼊两⾏值'A'和'a',Mysql会认为它是相同的,⽽在oracle中就不会。

就是mysql默认的字段值不区分⼤⼩写?这点是⽐较令⼈头痛的事。

直接使⽤客户端⽤sql查询数据库。

发现的确是⼤⼩不敏感。

通过查询资料发现需要设置collate(校对)。

collate规则:*_bin: 表⽰的是binary case sensitive collation,也就是说是区分⼤⼩写的*_cs: case sensitive collation,区分⼤⼩写*_ci: case insensitive collation,不区分⼤⼩写关于字符集与校验规则,mysql能:1、使⽤字符集来存储字符串,⽀持多种字符集;2、使⽤校验规则来⽐较字符串,同种字符集还能使⽤多种校验规则来⽐较;3、在同⼀台服务器、同⼀个数据库或者甚⾄在同⼀个表中使⽤不同字符集或校对规则来混合组合字符串;4、可以在任何级别(服务器、数据库、表、字段、字符串),定义不同的字符集和校验规则。

强制区分⼤⼩写可以通过binary关键字,⽅法有两种:第⼀种:让mysql查询时区分⼤⼩写select * from usertable where binary id='AAMkADExM2M5NjQ2LWUzYzctNDFkMC1h';第⼆种:在建表时加以标识create table `usertable`(`id` varchar(32) binary,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;或CREATE TABLE `usertable` (`id` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;在mysql中,存在⼤⼩写问题的地⽅还有:(1) 关键字:不区分⼤⼩写 select * fRom table_name 和 select * from table_name 效果是⼀样的(2) 标⽰符(如数据库名称和表名称):不区分⼤⼩写。

【记录】mysql中建表utf8和utf8mb4区别?timestamp和datetime区别?

【记录】mysql中建表utf8和utf8mb4区别?timestamp和datetime区别?mysql中建表utf8和utf8mb4区别?1:utf8 是 Mysql 中的⼀种字符集,只⽀持最长三个字节的 UTF-8字符,也就是 Unicode 中的基本多⽂本平⾯2:要在 Mysql 中保存 4 字节长度的 UTF-8 字符,需要使⽤ utf8mb4 字符集,但只有 5.5.33:版本以后的才⽀持(查看版本: select version();)。

我觉得,为了获取更好的兼容性,应该总是使⽤ utf8mb4 ⽽⾮ utf8.4:对于 CHAR 类型数据,utf8mb4 会多消耗⼀些空间,根据 Mysql 官⽅建议,使⽤ VARCHAR 替代 CHAR。

为了获取更好的兼容性,应该总是使⽤ utf8mb4 ⽽⾮ utf8,事实上,最新版的phpmyadmin默认字符集就是utf8mb4。

诚然,对于 CHAR 类型数据,使⽤utf8mb4 存储会多消耗⼀些空间。

那么utf8mb4⽐utf8多了什么的呢?多了emoji编码⽀持.如果实际⽤途上来看,可以给要⽤到emoji的库或者说表,设置utf8mb4.⽐如评论要⽀持emoji可以⽤到.建议普通表使⽤utf8 如果这个表需要⽀持emoji就使⽤utf8mb4timestamp和datetime区别?1 区别1.1 占⽤空间类型占据字节表⽰形式datetime8 字节yyyy-mm-dd hh:mm:sstimestamp4 字节yyyy-mm-dd hh:mm:ss1.2 表⽰范围类型表⽰范围datetime'1000-01-01 00:00:00.000000' to '9999-12-31 23:59:59.999999'timestamp'1970-01-01 00:00:01.000000' to '2038-01-19 03:14:07.999999'timestamp翻译为汉语即"时间戳",它是当前时间到 Unix元年(1970 年 1 ⽉ 1 ⽇ 0 时 0 分 0 秒)的秒数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

开发移动应用时,emoji表情在mysql默认情况下是不能存储的。

出现如下错误:
Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1
让mysql支持emoji表情存储的方法如下:
1、升级mysql 5.5以上版本;
2、服务——>mysql右键,找到my.ini的路径;
3、修改my.ini
[mysqld]
character-set-server=utf8mb4
[mysql]
default-character-set=utf8mb4
4、打开mysql command line client,或在安装目录bin中打开mysql.exe;
输入以下命令,用于修改环境变量:
set character_set_client = utf8mb4;
set character_set_connection = utf8mb4;
set character_set_database = utf8mb4;
set character_set_results = utf8mb4;
set character_set_server = utf8mb4;
5、在服务中,重启Mysql服务;
6、登陆MYSQL,show variables like 'character%'; 可以查看编码是否已经修改成功。

7、将已经建好的表也转换成utf8mb4
alter ta开发移动应用时,emoji表情在mysql默认情况下是不能存储的。

出现如下错误:
Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1
让mysql支持emoji表情存储的方法如下:
1、升级mysql 5.5以上版本;
2、服务——>mysql右键,找到my.ini的路径;
3、修改my.ini
[mysqld]
character-set-server=utf8mb4
[mysql]
default-character-set=utf8mb4
4、打开mysql command line client,或在安装目录bin中打开mysql.exe;
输入以下命令,用于修改环境变量:
set character_set_client = utf8mb4;
set character_set_connection = utf8mb4;
set character_set_database = utf8mb4;
set character_set_results = utf8mb4;
set character_set_server = utf8mb4;
5、在服务中,重启Mysql服务;
6、登陆MYSQL,show variables like 'character%'; 可以查看编码是否已经修改成功。

7、将已经建好的表也转换成utf8mb4
alter table TABLE_NAME convert to character set utf8mb4 collate utf8mb4_bin; (将TABLE_NAME替换成你的表名)
8、在代码中,连接数据库成功后,执行"set names utf8mb4"
修改成功!
在sql cmd窗口执行以下插入语句:
insert into Table (a) values (''牛仔帽
如果执行成功,就大功告成了!注意,在mysql客户端软件navicat的查询窗口运行是不能通过的,可能是navicat软件的支持问题。

ble TABLE_NAME convert to character set utf8mb4 collate utf8mb4_bin; (将TABLE_NAME替换成你的表名)
8、在代码中,连接数据库成功后,执行"set names utf8mb4"
修改成功!
在sql cmd窗口执行以下插入语句:
insert into Table (a) values ('牛仔帽')
如果执行成功,就大功告成了!注意,在mysql客户端软件navicat的查询窗口运行是不能通过的,可能是navicat软件的支持问题。

相关文档
最新文档