Database

支持emoji图标直接存储到数据库,更改MySQL数据库的编码为utf8mb4

星期一, 十月 23rd, 2017 | Database, JAVA-and-J2EE | 一条评论

随着emoji的频繁使用,对接微信后会带名字的emoji的很多,现在都需要支持.

utf-8编码可能2个字节、3个字节、4个字节的字符,但是MySQL的utf8编码只支持3字节的数据,而移动端的表情数据是4个字节的字符。

如果直接往采用utf-8编码的数据库中插入表情数据,java程序中将报SQL异常:

1
2
3
4
5
6
7
8
9
java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x92\x94’ for column ‘name’ at row 1 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525) 
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986) 
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140) 
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620) 
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1662) 
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1581)

可以对4字节的字符进行编码存储,然后取出来的时候,再进行解码。但是这样做会使得任何使用该字符的地方都要进行编码与解码。

utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的表情字符。

采用utf8mb4编码的好处是:存储与获取数据的时候,不用再考虑表情字符的编码与解码问题。

更改数据库的编码为utf8mb4:

1. MySQL的版本

utf8mb4的最低mysql版本支持版本为5.5.3+,若不是,请升级到较新版本。

2. MySQL驱动

5.1.34可用,最低不能低于5.1.13

3.修改MySQL配置文件
my.cnf一般在/etc/my.cnf位置。找到后请在以下三部分里添加如下内容:

1
2
3
4
5
6
7
8
9
10
[mysqld] 
character-set-client-handshake = FALSE 
character-set-server = utf8mb4 
collation-server = utf8mb4_unicode_ci 
init_connect='SET NAMES utf8mb4'
 
[client] 
default-character-set = utf8mb4 
[mysql] 
default-character-set = utf8mb4

4. 重启数据库,检查变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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是什么没关系。
 
但必须保证
 
系统变量	描述
character_set_client	(客户端来源数据使用的字符集)
character_set_connection	(连接层字符集)
character_set_database	(当前选中数据库的默认字符集)
character_set_results	(查询结果字符集)
character_set_server	(默认的内部操作字符集)
这几个变量必须是utf8mb4。

5. 数据库连接的配置

数据库连接参数中:
characterEncoding=utf8会被自动识别为utf8mb4,也可以不加这个参数,会自动检测。
而autoReconnect=true是必须加上的。

6. 将数据库和已经建好的表也转换成utf8mb4

更改数据库编码:ALTER DATABASE xxdb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

更改表编码:ALTER TABLE TABLE_NAME CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
如有必要,还可以更改列的编码

› Continue reading

Tags: , ,

linux每天定时备份MySQL数据库并删除五天前的备份文件

星期五, 三月 17th, 2017 | Database, JAVA-and-J2EE | 没有评论

MYSQL定期备份常用脚本如下:

1. mkdir -p /bak/mysqlbak
 
2.vi bakmysql.sh
内容如下
#!/bin/bash
# Name:bakmysql.sh
# This is a ShellScript For Auto DB Backup and Delete old Backup
#
backupdir=/bak/mysqlbak
time=` date +%Y%m%d%H `
/usr/local/webserver/mysql/bin/mysqldump -root-pxxx -S /tmp/mysql.sock  xx| gzip > $backupdir/xx_$time.sql.gz
#
find $backupdir -name "xx_*.sql.gz" -type f -mtime +5 -exec rm {} \; > /dev/null 2>&1

› Continue reading

MySQL表类型和存储引擎的修改遭遇版本不一致

星期五, 七月 25th, 2014 | Database, JAVA-and-J2EE | 没有评论

使用的是老版本的mysql客户端Navicate 8 ,mysql 服务端用的是mysql5.6的版本,在修改版本引擎的时候出现版本不对;

mysql error ‘TYPE=MyISAM’

解决办法:
Replace

TYPE=MyISAM

with

ENGINE=MyISAM

The problem was “TYPE=MyISAM” which should be “ENGINE=MyISAM” as per MySQL version updates – a simple search / replace has fix it.

附 修改表引擎sql:alter table db.user engine =MyISAM;

Tags: ,

mysqldump导出部分数据和insert into 复制部分数据

星期二, 六月 10th, 2014 | Database, linux | 没有评论

今天想导出部分数据找了半天终于找到对应的几个方法

首先看下字符集,省的导出的时候是乱码

1.用命令

mysql> SHOW VARIABLES LIKE "character_set%";

根据对应的字符集value决定采用导出字符latin1 还是utf8

2.采用 –where的方式导出

mysqldump -uroot -p123456 --default-character-set=latin1  i5a6  i5a6_data --where=" id < 100" > bki5a6.sql

3.采用创建新表结构和原来表相同复制部分数据的形式再全部导出新表数据即可

INSERT INTO Table2(field1,field2,...) SELECT value1,value2,... FROM Table1

涉及更多 mysql备份导入导出说明(二进制导出等) 参见 ://www.pomelolee.com/1088.html

完毕,感觉采用mysqldump 导出的时候更省事,流着以后用的时候好直接翻阅

Tags: , ,

mysql备份导入导出说明和对应的shell脚本

星期六, 十二月 22nd, 2012 | Database | 没有评论

1.导出整个数据库(–hex-blob 为有blob数据做的,防止乱码和导入失败用)
  mysqldump -u 用户名 -p 数据库名 > 导出的文件名

1
  mysqldump -u root -p --default-character-set=gbk --hex-blob i5a6 > i5a6.sql

2.导出一个表

  mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名

1
  mysqldump -u root -p i5a6  users> i5a6.sql

3.导出一个数据库结构

1
  mysqldump -u root -p -d --add-drop-table i5a6 >d:/i5a6.sql

  -d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table

4.导入数据库

  常用source 命令

  进入mysql数据库控制台,

  如mysql -u root -p

  mysql>use 数据库

  然后使用source命令,后面参数为脚本文件(如这里用到的.sql)

1
  mysql>source d:/i5a6.sql

› Continue reading

Tags: , ,

MySQL Installer 5.5.29在win7下安装失败解决

星期六, 十二月 22nd, 2012 | Database | 没有评论

今天下载了最新版的mysql,安装的时候遭遇 Last error: unable to configure service,在最后配置的时候出错.

几次三番都是一样,端口3306肯定是没有占用,系统也从来没有装过mysql,很是诡异.

最终的解决之法居然是换个安装目录,本人前次是安装在 D:/soft/db换成D:/db下居然好了,难道和/s有关???

如下步骤成功安装。
1.首先卸载没有成功安装的MYSQL的一系列东东

2.清理下注册表,cmd下运行 regedit 后-F3-搜索你的安装路径,我的是:D:/soft/db.删除所有能找到的键或者键值.(蛮多的)

3.使用netstat -na 确保3306端口未被占用,换个端口应该也行,我的3306没有用

4.更换安装目录为D:/db

Tags: ,

解决远程连接mysql速度慢方法

星期日, 九月 30th, 2012 | Database, php | 没有评论

换个了mysql和 代码不在同一个机器上,开启远程连接mysql发现连接的速度好慢,总要加上加载网页的要2-3秒的时间,无法忍受;

在网上找了下原因,终于解决,方法还是挺简单的 .

在my.ini或者my.cnf 文件 的 [mysqld]处添加skip-name-resolve 重启即可

主要原因 是去跳过dns解析

1
2
3
4
5
[mysqld]
#dns cancel
skip-name-resolve
#grant cancel  no advocate (不提倡,此处跳过权限检查,即使更快)
skip-grant-tables

注意:1.skip-name-resolve 是禁用dns解析,可以大幅提升远程连接速度,副作用是不能使用 mysql的授权表中就不能使用主机名了,只能使用IP

2.对于要使用localhost的本机用户 要开启 127.0.0.1 给对应的用户权限,否则帐号无法连接,

本人的 root用户只开了localhost 的时候,发现不能连接上phpmyadmin,而后添加127.0.0.1的权限后,就一切正常了

3.skip-grant-tables 为跳过用户的对应的权限设置,即所有用户都是root权限,在特定的情况下使用吧.

Tags: , , , ,

Microsoft SQL Server 2008 (RTM) 升级到 Microsoft SQL Server 2008 R2的操作

星期三, 五月 16th, 2012 | Database | 没有评论

Microsoft SQL Server 2008 (RTM) 升级到 Microsoft SQL Server 2008 R2的操作 ,记录x64位系统和32位系统
使用:
select @@VERSION 查询版本号
32位系统显示:
Microsoft SQL Server 2008 (RTM) – 10.0.1600.22 (Intel X86) Jul 9 2008 14:43:34 Copyright (c) 1988-2008 Microsoft Corporation Developer Edition on Windows NT 6.0 (Build 6001: Service Pack 1)

去下载:SQLFULL_x86_CHS:http://care.dlservice.microsoft.com/dl/download/1/E/6/1E626796-588A-495C-917B-321093FB98EB/2052/SQLFULL_x86_CHS.exe?lcid=2052&ptype=pcare

64位系统显示:
Microsoft SQL Server 2008 (RTM) – 10.0.1600.22 (X64) Jul 9 2008 14:17:44 Copyright (c) 1988-2008 Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 (Build 7601: Service Pack 1)

去下载:SQLFULL_x64_CHS:http://care.dlservice.microsoft.com/dl/download/1/E/6/1E626796-588A-495C-917B-321093FB98EB/2052/SQLFULL_x64_CHS.exe?lcid=2052&ptype=pcare

以升级方式:(序列号在网上找的)
需要输入序列号,必须选这一项:
=========================================
数据中心版:PTTFM-X467G-P7RH2-3Q6CG-4DMYB
DDT3B-8W62X-P9JD6-8MX7M-HWK38
=========================================
企业版:R88PF-GMCFT-KM2KR-4R7GB-43K4B
GYF3T-H2V88-GRPPH-HWRJP-QRTYB
=========================================
标准版:CXTFT-74V4Y-9D48T-2DMFW-TX7CY
B68Q6-KK2R7-89WGB-6Q9KR-QHFDW
=========================================
开发版:MC46H-JQR3C-2JRHY-XYRKY-QWPVM
FTMGC-B2J97-PJ4QG-V84YB-MTXX8
=========================================
工组版:XQ4CB-VK9P3-4WYYH-4HQX3-K2R6Q
=========================================
WEB版:FP4P7-YKG22-WGRVK-MKGMX-V9MTM
=========================================

Tags: , , , ,

SQL Server的版本号(SQL Server 2000 & 2005 & 2008)及查看方法

星期日, 五月 13th, 2012 | Database | 没有评论

今天要查询自己的装的sqlserver2008 是否是R2版本,搜索了下,发现很多人查询此问题,现在记录如下,通过版本命令查询
同时也了解了哥哥sql server的对应版本好,一看就非常清晰了,记录下
一、查看 SQL Server 2005/2008 版本号

select serverproperty('productversion') ,serverproperty('productlevel') ,serverproperty('edition')

下面是 SQL Server 2005 版本号查询结果信息:

version level edition
———— —- ——————-
9.00.3042.00 SP2 Enterprise Edition

下表是 SQL Server 2005 版本号信息:

SQL Server 2005 版本号 SQL Server 2005 版本描述
———————– ——————————
2005.90.1399 RTM (Release to Manufacturing)
2005.90.2047 SQL Server 2005 SP1
2005.90.3042 SQL Server 2005 SP2
2005.90.4035 SQL Server 2005 SP3
2005.90.5000 SQL Server 2005 SP4

下表是 SQL Server 2008 版本号信息:

SQL Server 2008版本号 SQL Server 2008 版本描述
———————– ——————————
10.0.1600.22 RTM
10.00.2531.00 SQL Server 2008 SP1
10.00.4000.00 SQL Server 2008 SP2
10.50.1600.1 SQL Server 2008 R2 (RTM)
› Continue reading

Tags: , ,

mysql见鬼操作source备份sql失败记录

星期五, 五月 11th, 2012 | Database | 没有评论

很见鬼的操作,明明在命令行use databaseA,source 对应sql都显示成功.
完成去数据库查询,居然一个表都没有,重启电脑执行依然如故.
自己写个小的sql去source倒是可以.

解决办法: 关闭你的所谓360系列软件和你的杀毒软件系列
然后再执行,发现一切都正常了.

具体什么原因,我到现在也不得而知,彻底无语,难道防护过头了??

Tags: , ,

Search

文章分类

Meta