mysql+php中文乱码问题及mysql时间函数

mysql+php中文乱码问题及mysql时间函数
mysql+php中文乱码问题及mysql时间函数

mysql+php中文显示乱码的解决mysql+php中文显示乱码的解决

建议数据库用utf8编码

问题汇总:

1.mysql数据库默认的编码是utf8,如果这种编码与你的PHP网页不一致,可能就会造成MYSQL乱码.

2.MYSQL中创建表时会让你选择一种编码,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码.

3.MYSQL创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码.

4.用户提交页面的编码与显示数据的页面编码不一致,就肯定会造成PHP 页面乱码.

5.如用户输入资料的页面是big5码, 显示用户输入的页面却是gb2312,这种100%会造成PHP页面乱码.

6.PHP页面字符集不正确.

7.PHP连接MYSQL数据库语句指定的编码不正确.

使用mysql+php产生乱码的原因都了解得很清楚了,那么解决就不困难

了.

针对不同问题的解决方法:

1.mysql数据库默认的编码是utf8,如果这种编码与你的PHP网页不一致,可能就会造成MYSQL乱码.

修改数据库编码,如果是数据库编码不正确,可以在phpmyadmin 执行如下命令:

ALTER DATABASE 'test' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin 以上命令就是将test数据库的编码设为utf8.

2.MYSQL中创建表时会让你选择一种编码,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码.

修改表的编码:

ALTER TABLE 'category' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin 以上命令就是将一个表category的编码改为utf8.

3.MYSQL创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码.

修改字段的编码:

ALTER TABLE 'test' CHANGE 'dd' 'dd' VARCHAR( 45 ) CHARACTER SET utf8

COLLATE utf8_bin NOT NULL

以上命令就是将test表中 dd的字段编码改为utf8.

4.用户提交页面的编码与显示数据的页面编码不一致,就肯定会造成PHP 页面乱码.

如果是这种情况容易解决,只需检查下页面,修改源文件的charset即可.

5.如用户输入资料的页面是big5码, 显示用户输入的页面却是gb2312,这种100%会造成PHP页面乱码.

这种情况也是修改页面charset即可.

6.PHP页面字符集不正确.

为了避免PHP页面乱码的发生,PHP页面开始第一句

header("content-type:text/html; charset=utf-8");

//强行指定页面的编码,以避免乱码

7.PHP连接MYSQL数据库语句指定的编码不正确.

在连接数据库的语句中.

mysql_connect('localhost','user','password');

mysql_select_db('my_db');

mysql_query("set names utf8;"); //select 数据库之后加多这一句

mysql日期函数的总结

DATE_FORMAT(date,format)

根據format字符串格式化date值。下列修飾符可以被用在format字符串中: %M 月名字(January……December)

%W 星期名字(Sunday……Saturday)

%D 有英語前綴的月份的日期(1st, 2nd, 3rd, 等等。)

%Y 年, 數字, 4 位

%y 年, 數字, 2 位

%a 縮寫的星期名字(Sun……Sat)

%d 月份中的天數, 數字(00……31)

%e 月份中的天數, 數字(0……31)

%m 月, 數字(01……12)

%c 月, 數字(1……12)

%b 縮寫的月份名字(Jan……Dec)

%j 一年中的天數(001……366)

%H 小時(00……23)

%k 小時(0……23)

%h 小時(01……12)

%I 小時(01……12)

%l 小時(1……12)

%i 分鐘, 數字(00……59)

%r 時間,12 小時(hh:mm:ss [AP]M)

%T 時間,24 小時(hh:mm:ss)

%S 秒(00……59)

%s 秒(00……59)

%p AM或PM

%w 一個星期中的天數(0=Sunday ……6=Saturday )

%U 星期(0……52), 這裡星期天是星期的第一天

%u 星期(0……52), 這裡星期一是星期的第一天

%% 一個文字「%」。

這裡是一個使用日期函數的例子。下面的查詢選擇所有 date_col 值在最後30 天內的記錄。

mysql> SELECT something FROM tbl_name

WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30; DAYOFWEEK(date)

返回 date 的星期索引(1 = Sunday, 2 = Monday, ... 7 = Saturday)。索引值符合 ODBC 的標準。

mysql> SELECT DAYOFWEEK('1998-02-03');

-> 3

WEEKDAY(date)

返回 date 的星期索引(0 = Monday, 1 = Tuesday, ... 6 = Sunday):mysql> SELECT WEEKDAY('1998-02-03 22:23:00');

-> 1

mysql> SELECT WEEKDAY('1997-11-05');

-> 2

DAYOFMONTH(date)

返回 date 是一月中的第幾天,範圍為 1 到 31:

mysql> SELECT DAYOFMONTH('1998-02-03');

-> 3

DAYOFYEAR(date)

返回 date 是一年中的第幾天,範圍為 1 到 366:

mysql> SELECT DAYOFYEAR('1998-02-03');

-> 34

MONTH(date)

返回 date 中的月份,範圍為 1 到 12:

mysql> SELECT MONTH('1998-02-03');

-> 2

DAYNAME(date)

返回 date 的星期名:

mysql> SELECT DAYNAME("1998-02-05");

-> 'Thursday'

MONTHNAME(date)

返回 date 的月份名:

mysql> SELECT MONTHNAME("1998-02-05");

-> 'February'

QUARTER(date)

返回 date 在一年中的季度,範圍為 1 到 4:

mysql> SELECT QUARTER('98-04-01');

-> 2

WEEK(date)

WEEK(date,first)

對於星期日是一周中的第一天的場合,如果函數只有一個參數調用,返回date 為一年的第幾周,返回值範圍為 0 到 53 (是的,可能有第 53 周的開始)。兩個參數形式的 WEEK() 允許你指定一周是否以星期日或星期一開始,以及返回值為 0-53 還是 1-52。這裡的一個表顯示第二個參數是如何工作的:值含義

0 一周以星期日開始,返回值範圍為 0-53

1 一周以星期一開始,返回值範圍為 0-53

2 一周以星期日開始,返回值範圍為 1-53

3 一周以星期一開始,返回值範圍為 1-53 (ISO 8601)

mysql> SELECT WEEK('1998-02-20');

-> 7

mysql> SELECT WEEK('1998-02-20',0);

-> 7

mysql> SELECT WEEK('1998-02-20',1);

-> 8

mysql> SELECT WEEK('1998-12-31',1);

-> 53

注意,在版本 4.0 中,WEEK(#,0) 被更改為匹配 USA 曆法。注意,如果一周是上一年的最後一周,當你沒有使用 2 或 3 做為可選參數時,MySQL 將返回 0:

mysql> SELECT YEAR('2000-01-01'), WEEK('2000-01-01',0);

-> 2000, 0

mysql> SELECT WEEK('2000-01-01',2);

-> 52

你可能會爭辯說,當給定的日期值實際上是 1999 年的第 52 周的一部分時,MySQL 對 WEEK() 函數應該返回 52。我們決定返回 0 ,是因為我們希望該函數返回「在指定年份中是第幾周」。當與其它的提取日期值中的月日值的函數結合使用時,這使得 WEEK() 函數的用法可靠。如果你更希望能得到恰當的年-周值,那麼你應該使用參數 2 或 3 做為可選參數,或者使用函數YEARWEEK() :

mysql> SELECT YEARWEEK('2000-01-01');

-> 199952

mysql> SELECT MID(YEARWEEK('2000-01-01'),5,2);

-> 52

YEAR(date)

返回 date 的年份,範圍為 1000 到 9999:

mysql> SELECT YEAR('98-02-03');

-> 1998

YEARWEEK(date)

YEARWEEK(date,first)

返回一個日期值是的哪一年的哪一周。第二個參數的形式與作用完全與WEEK() 的第二個參數一致。注意,對於給定的日期參數是一年的第一周或最後一周的,返回的年份值可能與日期參數給出的年份不一致:

mysql> SELECT YEARWEEK('1987-01-01');

-> 198653

注意,對於可選參數 0 或 1,周值的返回值不同於 WEEK() 函數所返回值(0), WEEK() 根據給定的年語境返回周值。

HOUR(time)

返回 time 的小時值,範圍為 0 到 23:

mysql> SELECT HOUR('10:05:03');

-> 10

MINUTE(time)

返回 time 的分鐘值,範圍為 0 到 59:

mysql> SELECT MINUTE('98-02-03 10:05:03');

-> 5

SECOND(time)

返回 time 的秒值,範圍為 0 到 59:

mysql> SELECT SECOND('10:05:03');

-> 3

PERIOD_ADD(P,N)

增加 N 個月到時期 P(格式為 YYMM 或 YYYYMM)中。以 YYYYMM 格式返回值。注意,期間參數 P 不是一個日期值:

mysql> SELECT PERIOD_ADD(9801,2);

-> 199803

PERIOD_DIFF(P1,P2)

返回時期 P1 和 P2 之間的月數。P1 和 P2 應該以 YYMM 或 YYYYMM 指定。注意,時期參數 P1 和 P2 不是日期值:

mysql> SELECT PERIOD_DIFF(9802,199703);

-> 11

DATE_ADD(date,INTERVAL expr type)

DATE_SUB(date,INTERVAL expr type)

ADDDATE(date,INTERVAL expr type)

SUBDATE(date,INTERVAL expr type)

這些函數執行日期的算術咚恪 DDDATE() 和SUBDATE() 分別是DATE_ADD() 和 DATE_SUB() 的同義詞。在 MySQL 3.23 中,如果表達式的右邊是一個日期值或一個日期時間型字段,你可以使用 + 和 - 代替DATE_ADD() 和 DATE_SUB()(示例如下)。參數 date 是一個 DATETIME 或DATE 值,指定一個日期的開始。expr 是一個表達式,指定從開始日期上增加還是減去間隔值。expr 是一個字符串;它可以以一個「-」領頭表示一個負的間隔值。type 是一個關鍵詞,它標誌著表達式以何格式被解釋。下表顯示 type 和 expr 參數是如何關聯的: type 值 expr 期望的格式SECOND SECONDS

MINUTE MINUTES

HOUR HOURS

DAY DAYS

MONTH MONTHS

YEAR YEARS

MINUTE_SECOND "MINUTES:SECONDS"

HOUR_MINUTE "HOURS:MINUTES"

DAY_HOUR "DAYS HOURS"

YEAR_MONTH "YEARS-MONTHS"

HOUR_SECOND "HOURS:MINUTES:SECONDS"

DAY_MINUTE "DAYS HOURS:MINUTES"

DAY_SECOND "DAYS HOURS:MINUTES:SECONDS"

在 expr 的格式中,MySQL 允許任何字符作為定界符。表中所顯示的是建議的定界字符。如果 date 參數是一個 DATE 值,並且計算的間隔僅僅有 YEAR、MONTH 和 DAY 部分(沒有時間部分),那麼返回值也是一個 DATE 值。否則返回值是一個 DATETIME 值:

mysql> SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND;

-> 1998-01-01 00:00:00

mysql> SELECT INTERVAL 1 DAY + "1997-12-31";

-> 1998-01-01

mysql> SELECT "1998-01-01" - INTERVAL 1 SECOND;

-> 1997-12-31 23:59:59

mysql> SELECT DATE_ADD("1997-12-31 23:59:59",

-> INTERVAL 1 SECOND);

-> 1998-01-01 00:00:00

mysql> SELECT DATE_ADD("1997-12-31 23:59:59",

-> INTERVAL 1 DAY);

-> 1998-01-01 23:59:59

mysql> SELECT DATE_ADD("1997-12-31 23:59:59",

-> INTERVAL "1:1" MINUTE_SECOND);

-> 1998-01-01 00:01:00

mysql> SELECT DATE_SUB("1998-01-01 00:00:00",

-> INTERVAL "1 1:1:1" DAY_SECOND);

-> 1997-12-30 22:58:59

mysql> SELECT DATE_ADD("1998-01-01 00:00:00",

-> INTERVAL "-1 10" DAY_HOUR);

-> 1997-12-30 14:00:00

mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);

-> 1997-12-02

如果你指定了一個太短的間隔值(沒有包括 type 關鍵詞所期望的所有間隔部分),MySQL 假設你遺漏了間隔值的最左邊部分。例如,如果指定一個 type 為 DAY_SECOND,那麼 expr 值被期望包含天、小時、分鐘和秒部分。如果你像 "1:10" 樣指定一個值,MySQL 假設天和小時部分被遺漏了,指定的值代表分鐘和秒。換句話說,"1:10" DAY_SECOND 被解釋為等價於"1:10" MINUTE_SECOND。這類似於 MySQL 解釋 TIME 值為經過的時間而不是一天的時刻。注意,如果依著包含一個時間部分的間隔增加或減少一個日期值,該日期值將被自動地轉換到一個日期時間值:

mysql> SELECT DATE_ADD("1999-01-01", INTERVAL 1 DAY);

-> 1999-01-02

mysql> SELECT DATE_ADD("1999-01-01", INTERVAL 1 HOUR);

-> 1999-01-01 01:00:00

如果你使用了確定不正確的日期,返回結果將是 NULL。如果你增加 MONTH、YEAR_MONTH 或 YEAR,並且結果日期的天比新月份的最大天數還大,那麼它

將被調整到新月份的最大天數:

mysql> SELECT DATE_ADD('1998-01-30', INTERVAL 1 MONTH);

-> 1998-02-28

注意,上面的例子中,單詞 INTERVAL 和關鍵詞 type 是不區分字母大小寫的。

EXTRACT(type FROM date)

EXTRACT() 函數使用與 DATE_ADD() 或 DATE_SUB() 一致的間隔類型,但是它用於指定從日期中提取的部分,而不是進行日期算術咚恪?

mysql> SELECT EXTRACT(YEAR FROM "1999-07-02");

-> 1999

mysql> SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03");

-> 199907

mysql> SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03");

-> 20102

TO_DAYS(date)

給出一個日期 date,返回一個天數(從 0 年開始的天數):

mysql> SELECT TO_DAYS(950501);

-> 728779

mysql> SELECT TO_DAYS('1997-10-07');

-> 729669

TO_DAYS() 無意於使用先於格裡高裡曆法(即現行的陽曆)(1582)出現的值,

因為它不考慮當曆法改變時所遺失的天數。

FROM_DAYS(N)

給出一個天數 N,返回一個 DATE 值:

mysql> SELECT FROM_DAYS(729669);

-> '1997-10-07'

FROM_DAYS() 無意於使用先於格裡高裡曆法(1582)出現的值,因為它不考慮當曆法改變時所遺失的天數。

DATE_FORMAT(date,format)

依照 format 字符串格式化 date 值。下面的修飾符可被用於 format 字符串中:修飾符含義

%M 月的名字 (January..December)

%W 星期的名字 (Sunday..Saturday)

%D 有英文後綴的某月的第幾天 (0th, 1st, 2nd, 3rd, etc.)

%Y 年份,數字的,4 位

%y 年份,數字的,2 位

%X 周值的年份,星期日是一個星期的第一天,數字的,4 位,與 '%V' 一同使用

%x 周值的年份,星期一是一個星期的第一天,數字的,4 位,與 '%v' 一同使用

%a 縮寫的星期名 (Sun..Sat)

%d 月份中的天數,數字的 (00..31)

%e 月份中的天數,數字的 (0..31)

%m 月,數字的 (00..12)

%c 月,數字的 (0..12)

%b 縮寫的月份名 (Jan..Dec)

%j 一年中的天數 (001..366)

%H 小時 (00..23)

%k 小時 (0..23)

%h 小時 (01..12)

%I 小時 (01..12)

%l 小時 (1..12)

%i 分鐘,數字的 (00..59)

%r 時間,12 小時 (hh:mm:ss [AP]M)

%T 時間,24 小時 (hh:mm:ss)

%S 秒 (00..59)

%s 秒 (00..59)

%p AM 或 PM

%w 一周中的天數 (0=Sunday..6=Saturday)

%U 星期 (00..53),星期日是一個星期的第一天

%u 星期 (00..53),星期一是一個星期的第一天

%V 星期 (01..53),星期日是一個星期的第一天。與 '%X' 一起使用%v 星期 (01..53),星期一是一個星期的第一天。與 '%x' 一起使用

%% 一個字母「%」

所有其它的字符不經過解釋,直接複製到結果中:

mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');

-> 'Saturday October 1997'

mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');

-> '22:23:00'

mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00',

'%D %y %a %d %m %b %j');

-> '4th 97 Sat 04 10 Oct 277'

mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00',

'%H %k %I %r %T %S %w');

-> '22 22 10 10:23:00 PM 22:23:00 00 6'

mysql> SELECT DATE_FORMAT('1999-01-01', '%X %V');

-> '1998 52'

在 MySQL 3.23 中,在格式修飾符前需要字符 `%'。在更早的 MySQL 版本中,`%' 是可選的。月份與天修飾符的範圍從零開始的原因是,在 MySQL 3.23 中,它允許存儲不完善的日期值(例如 '2004-00-00')。

TIME_FORMAT(time,format)

它的使用方法與上面的 DATE_FORMAT() 函數相似,但是 format 字符串只包含處理小時、分和秒的那些格式修飾符。使用其它的修飾符會產生一個 NULL 值或 0。

CURDATE()

CURRENT_DATE

以 'YYYY-MM-DD' 或 YYYYMMDD 格式返回當前的日期值,返回的格式取決於該函數是用於字符串還是數字語境中:

mysql> SELECT CURDATE();

-> '1997-12-15'

mysql> SELECT CURDATE() + 0;

-> 19971215

CURTIME()

CURRENT_TIME

以 'HH:MM:SS' 或 HHMMSS 格式返回當前的時間值,返回的格式取決於該函數是用於字符串還是數字語境中:

mysql> SELECT CURTIME();

-> '23:50:26'

mysql> SELECT CURTIME() + 0;

-> 235026

NOW()

SYSDATE()

CURRENT_TIMESTAMP

以 'YYYY-MM-DD HH:MM:SS' 或 YYYYMMDDHHMMSS 格式返回當前的日期時間值,返回的格式取決於該函數是用於字符串還是數字語境中:

mysql> SELECT NOW();

-> '1997-12-15 23:50:26'

mysql> SELECT NOW() + 0;

-> 19971215235026

注意,函數 NOW() 在每個查詢中只計算一次,也就是在查詢開始執行時。這就是說,如果在一個單獨的查詢中多次引用了 NOW(),它只會給出值都是一個相同的時間。

UNIX_TIMESTAMP()

UNIX_TIMESTAMP(date)

如果調用時沒有參數,以無符號的整數形式返回一個 Unix 時間戳(從'1970-01-01 00:00:00' GMT 開始的秒數)。如果以一個參數 date 調用UNIX_TIMESTAMP(),它將返回該參數值從 '1970-01-01 00:00:00' GMT 開始經過的秒數值。date 可以是一個 DATE 字符串,一個 DATETIME 字符串,一個 TIMESTAMP,或者以一個 YYMMDD 或 YYYYMMDD 顯示的本地時間:mysql> SELECT UNIX_TIMESTAMP();

-> 882226357

mysql> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');

-> 875996580

當 UNIX_TIMESTAMP 被用於一個 TIMESTAMP 列時,函數直接返回一個內部的時間戳值,而不進行一個隱含地「string-to-unix-timestamp」轉換。如果你傳遞一個超出範圍的日期參數給 UNIX_TIMESTAMP() ,它將返回 0,但

是請注意,MySQL 對其僅僅進行基本的檢驗(年範圍 1970-2037,月份 01-12,日期 01-31)。如果你希望減去 UNIX_TIMESTAMP() 列,你應該需要將結果強制轉換為一有符號整數。查看章節 6.3.5 Cast 函數。

FROM_UNIXTIME(unix_timestamp [,format])

以'YYYY-MM-DD HH:MM:SS' 或YYYYMMDDHHMMSS 格式返回一個unix_timestamp 參數值,返回值的形式取決於該函數使用於字符串還是數字語境。如果 format 給出,返回值依 format 字符串被格式。format 可以包含與 DATE_FORMAT() 函數同樣的修飾符。

mysql> SELECT FROM_UNIXTIME(875996580);

-> '1997-10-04 22:23:00'

mysql> SELECT FROM_UNIXTIME(875996580) + 0;

-> 19971004222300

mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(),

'%Y %D %M %h:%i:%s %x');

-> '1997 23rd December 03:43:30 1997'

SEC_TO_TIME(seconds)

以 'HH:MM:SS' 或 HHMMSS 格式返回參數 seconds 被轉換到時分秒後的值,返回值的形式取決於該函數使用於字符串還是數字語境:

mysql> SELECT SEC_TO_TIME(2378);

-> '00:39:38'

mysql> SELECT SEC_TO_TIME(2378) + 0;

mysql乱码处理

用MS SQL和oracle9 太吃内存,有点大,全给卸载了. 安装了mysql占内存小,方便使用! version:mysql-essential-5.1.36 在MySQL Command Line Client显示中文一切正常; 在eclipse中新工程,连接到mysql,读取一个表显示: 代码: package com.mch.mysql; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Mysql1 { public static void main(String[] args) { String url ="jdbc:mysql://localhost/test"; String user="root"; String password="******"; try { Class.forName("org.gjt.mm.mysql.Driver").newInstance(); Connection conn= DriverManager.getConnection(url,user,password); Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery("select * from pet"); while(rs.next()){ System.out.print("name:" + rs.getString(1)); System.out.print("\t所有者:" + rs.getString(2)); System.out.print("\tbirth:" + rs.getString("birth")); System.out.println(); } rs.close(); stmt.close(); conn.close(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } } 显示乱码?号.

解决openfire在使用MySQL数据库后的中文乱码问题

解决openfire在使用MySQL数据库后的中文乱码问题 openfire是一个非常不错的IM服务器,而且是纯Java实现,具有多个平台的版本,他的数据 存储可以采用多种数据库,如MySQL,Oracle等。 在实际使用时大家遇到最多的就是采用MySQL数据库后的中文乱码问题,这个问题十分有趣, 而且从现象上可以看出openfire内部的一些机制。 实际问题是这样的:首先启动openfire服务器,然后利用客户端或直接登录到后台新建一个帐户,为该帐户指定一些中文的属性,如姓名等。如果不重启服务器,你永远不会觉得有什么不对的地方,因为所有的中文显示都是正常的。接下来重启一下openfire,再用建立的帐号登录 客户端或进入后台管理端查看,会发现所有的中文全都变成了问号。登录到数据库中进行查看,发现所有的中文字符也均为问号,这说明了两个问题: openfire具有应用层缓存 数据库编码存在问题 解决办法其实也很简单,首先要保证你为openfire创建的数据库编码是utf8的,建表语句如下: create database openfire default character set utf8 default collate utf8_general_ci 当你原来就创建好数据库时,你可以用: alter database openfire default character set utf8 default collate utf8_general_ci; 其次,在初始化openfire数据库,即第一次配置openfire服务器时,在连接数据库那里的连 接串要加入字符编码格式,必须在连接里增加UTF8的编码要求,连接字符串设置如下: jdbc:mysql://127.0.0.1:3306/openfire?useUnicode=true&characterEncoding=utf8 如果已经安装完成,这个配置也是可以改动的,直接到openfire的安装目录下,找到 conf/openfire.xml这样一个文件,打开找到如下的XML节,修改其中的serverURL即可 com.mysql.jdbc.Driver jdbc:mysql://127.0.0.1:3306/openfire?useUnicode=true&characterEncodi ng=utf8 注意:由于&具有特殊含义,因此原&符号必须被转义为&

解决PHP+mysql处理中文乱码的独家方案

解决PHP+mysql处理中文乱码的独家方案 本方案适用于所有页面文件均为php(已成功测试过),如果有混合文件读者可以亲自测试。 问题现象如下图,1所示为修复过的头部引用文件header.php,中文能正常显示,2所示为未修复过的standard.php页面文件。 一、为了解决问题,首先应该设置数据库的字符编码,如下图所示,本例将所有编码设置为UTF-8。 同样将数据库中的所有表的字符编码设置成UTF-8。

这样,数据库中可以正常显示中文字符了,如下图所示。 如果要导入外来数据,也要设置好字符编码,对于非mysql数据库的导入(如从ACCESS数据库中导入),需要设置分隔字段的字符,然后执行便可,如下图所示。 ---------------------------------------- 二、数据库的字符编码完成后,便要将页面文件的编码设置好。 这里的要点有如下三点(红色为说明文字):

为了实现上述三点要求,本例采用的方案如下: 1.创建一个数据库连接文件conn.php ,其中在开头设置header 编码,并在创建数据连接后设置SQL 请求的编码,如下图所示: 2.设置页面文件的文件类型。可以在页面文件中的标签中设置字符编 码。 2.1如果之前的字符编码为gb2312,则该文件类型为ANSI (本例使用DW 和notepad++软件,读者也可用UE 编辑软件,只不过类型显示名称不一样而已),如下图所示: 2.2将标签的编码设置成utf-8并保存文件后,再次打开,会发现文件类型变成了ANSI as UTF-8,如下图所示:

mysql数据库乱码问题

数据库读出乱码解决 一、分析常见数据库问题 修改MYSQL数据库,数据表,字段的编码(解决JSP乱码) 要解决JSP乱码,首先就要了解JSP乱码的原因 1.架设服务器安装MYSQL时的会让你选择一种编码,如果这种编码与你的网页不一致,可能就会造成JSP页面乱码 2.在PHPMYADMIN或mysql-front等系统创建数据库时会让你选择一种编码,如果这种编码与你的网页不一致,也有可能造成JSP页面乱码 3.创建表时会让你选择一种编码,如果这种编码与你的网页编码不一致,也可能造成JSP页面乱码 4.创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,也可能造成JSP 页面乱码 5.用户提交JSP页面的编码与显示数据的JSP页面编码不一致,就肯定会造成JSP页面乱码. 如用户输入资料的JSP页面是big5码,显示用户输入的JSP页面却是gb2312,这种100%会造成JSP页面乱码 6.字符集不正确 要注意: 1.平时你在某些网站看到的文字可能有几种编码,如你看到一个繁体字,它有可能是big5编码,也有可能是utf-8编码的,更有可能是gb码的,没错,也就是说有简体编码的繁体字,也有繁体编码的简体字,一定要了解这一点. 如果你是做一个简体编码的网页,编码定为GB2312,如果有香港和台湾地区的访客提交繁体的信息,就可能会造成乱码,解决方法就是(1)将网站编码设为utf-8,这样可以兼容世界上所有字符,(2)如果网站已经运作了好久,已有很多旧数据,不能再更改简体中文的设定,那么建议将页面的编码设为GBK, GBK与GB2312的区别就在于:GBK能比GB2312显示更多的字符,要显示简体码的繁体字,就只能用GBK 7.JSP连接MYSQL数据库语句指定的编码不正确 8.JSP页面没有指定数据提交的编码,就会造成乱码: 所以,JSP乱码的原因无非就是以上几种,知道原因之后,要解决JSP乱码的方法也容易多了 我们一一来表达: 1.如果安装mysql的编码已不能更改,很多朋友是购买虚拟主机建立网站,无权更改MYSQL的安装编码,这一关我们可以跳过,因为只要后面的步聚正确,一样能解决乱码问题 2.修改数据库编码,如果是数据库编码不正确:可以在phpmyadmin执行如下命令:ALTER DATABASE`test`DEFAULT CHARACTER SET utf8COLLATE utf8_bin 以上命令就是将test数据库的编码设为utf8

mysql+php中文乱码问题及mysql时间函数

mysql+php中文显示乱码的解决mysql+php中文显示乱码的解决 建议数据库用utf8编码 问题汇总: 1.mysql数据库默认的编码是utf8,如果这种编码与你的PHP网页不一致,可能就会造成MYSQL乱码. 2.MYSQL中创建表时会让你选择一种编码,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码. 3.MYSQL创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码. 4.用户提交页面的编码与显示数据的页面编码不一致,就肯定会造成PHP 页面乱码. 5.如用户输入资料的页面是big5码, 显示用户输入的页面却是gb2312,这种100%会造成PHP页面乱码. 6.PHP页面字符集不正确. 7.PHP连接MYSQL数据库语句指定的编码不正确. 使用mysql+php产生乱码的原因都了解得很清楚了,那么解决就不困难

了. 针对不同问题的解决方法: 1.mysql数据库默认的编码是utf8,如果这种编码与你的PHP网页不一致,可能就会造成MYSQL乱码. 修改数据库编码,如果是数据库编码不正确,可以在phpmyadmin 执行如下命令: ALTER DATABASE 'test' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin 以上命令就是将test数据库的编码设为utf8. 2.MYSQL中创建表时会让你选择一种编码,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码. 修改表的编码: ALTER TABLE 'category' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin 以上命令就是将一个表category的编码改为utf8. 3.MYSQL创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码. 修改字段的编码: ALTER TABLE 'test' CHANGE 'dd' 'dd' VARCHAR( 45 ) CHARACTER SET utf8

mysql中文乱码解决

转载:Mysql中文乱码的解决方法 第一种方法,很精辟的总结: 经常更换虚拟主机,而各个服务商的MYSQL版本不同,当导入数据后,总会出现乱码等无法正常显示的问题,查了好多资料,总结出自己的一点技巧: WINDOWS 下导入应该这样 使用MYSQL的命令 在DOS 命令下进入mysql的bin目录下,输入mysql -uroot -p密码数据库名称<要恢复的数据库, 例如我们要把D盘的一个名称为test.sql的数据库恢复到本地的test2这个数据库,那么就这样: mysql -uroot -p密码test2以前的国外主机用的Mysql是4.x系列的,感觉还比较好,都无论GBK和UTF-8都没有乱码,没想到新的主机的Mysql是5.0版本的,导入数据后,用Php读出来全是问号,乱码一片,记得我以前也曾经有过一次切换出现乱码的经验,原因肯定是Mysql版本之间的差异问题。 只好查资料,发现了一个解决方法,就是在mysql_connect后面加一句SET NAMES UTF8,即可使得UTF8的数据库消除乱码,对于GBK的数据库则使用SET NAMES GBK,代码如下: $mysql_mylink = mysql_connect($mysql_host, $mysql_user, $mysql_pass); mysql_query("SET NAMES 'GBK'"); 数据库字符集为utf-8 连接语句用这个 mysql_query("SET NAMES 'UTF8'"); mysql_query("SET CHARACTER SET UTF8"); mysql_query("SET CHARACTER_SET_RESULTS=UTF8'");

mysql数据库乱码

彻底解决mysql中文乱码的办法 MySQL会出现中文乱码的原因不外乎下列几点: 1.server本身设定问题,例 如还停留在latin1 2.table的语系设定问题(包含character与collation) 3.客户端程式(例如php)的连线语系设定问题强烈建议使用utf8!!!! utf8可以兼容世界上所有字符!!!! Linux下Mysql插入中文显示乱码解决方案 mysql -uroot -p 回车输入密码 进入mysql查看状态如下: mysql不能插入中文 默认的是客户端和服务器都用了latin1,所以会乱码。 解决方案: mysql>user mydb; mysql>alter database mydb character set utf8;! 另一种方法是直接修改默认的Mysql配置文件 在debian环境下,彻底解决mysql无法插入中文和中文乱码的办法 上面提到了用临时方法更改数据库的字符集设置,显示中文,但是后来发现在有的系统下并不能成功,比如我用的debian 7.0,找了好久终于找到一个适合debian系统的解决方案,debian 7.0下测试成功,其他诸如修改client和mysql加入default-character-set=utf8的方法之类的,只适用与5.5以前的系统! 终极决绝方案,一劳永逸:

debian下mysql的字符串修改为utf8(参考:rainysia的专栏) 一、进入mysql(mysql -uroot -p),查看当前数据库字符集(status;) 二、查看当前系统版本(lsb_release -a) Mysql不能插入中文 三、#vim /etc/mysql/https://www.360docs.net/doc/231238330.html,f 。(5.5以前系统)在【client】下面加 入default-character-set=utf8 在【mysqld】下面加入default-character-set=utf8 Notice:注意如果修改后不能启动报错试试把default-character-set=utf8 改为character_set_server=utf8,仅仅加入到mysqld下面的.client就不需 要加了 四、#vim /etc/mysql/https://www.360docs.net/doc/231238330.html,f 。(5.5以后系统)如下修改: [client] default-character-set=utf8 [mysqld] default-storage-engine=INNODB character-set-server=utf8 collation-server=utf8_general_ci 五、重启mysql(/etc/init.d/mysql stop /etc/init.d/mysql start) 六、修成成功,进入mysql查看字符集(mysql>show variables like ‘character_set_%’;) Mysql无法插入中文 一、避免创建数据库及表出现中文乱码和查看编码方法 1、创建数据库的时候:CREATE DATABASE `test` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; 2、建表的时候 CREATE TABLE `database_user` ( `ID` varchar(40) NOT NULL default '', `UserID` varchar(40) NOT NULL default '', ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 这3个设置好了,基本就不会出问题了,即建库和建表时都使用相同的编码格式。但是如果你已经建了库和表可以 通过以下方式进行查询。 1.查看默认的编码格式: mysql> show variables like "%char%"; +--------------------------+---------------+ |

Oracle数据库工具中文显示乱码问题的解决

Oracle数据库工具中文显示乱码问题的解决 Oracle客户端查询工具有时会有查处的结果为中文时不能正常显示,要么为乱码,要么为问号,plsql出现这种问题,以为是版本造成的,用了老的和最新的还是一样,换了另外的数据库工具也一样,但注意一点,数据其实是没有问题的,取出来显示是正常的中文,只是在工具里显示的是问号。其实问题的原理很简单,就是字符集设置不正确造成的,但如此简单的原理在解决的过程中却会遇到很多麻烦,下面结合我遇到和解决的过程,给朋友们一点思路,说不定你们跟我的问题一样,通过这篇文章不用再折腾了,很快搞定,感觉飘飘…… 首先讲讲字符集的知识,Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。 影响oracle数据库字符集最重要的参数是NLS_LANG参数。它的格式如下: NLS_LANG = language_territory.charset 它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。 其中: Language 指定服务器消息的语言,territory 指定服务器的日期和数字格式,charset 指定字符集。如:AMERICAN _ AMERICA.

ZHS16GBK。从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。 如何查询Oracle的字符集,很多人都碰到过因为字符集不同而使数据导入失败的情况。这涉及三方面的字符集,一是oracel server端的字符集,二是oracle client端的字符集;三是dmp文件的字符集。在做数据导入的时候,需要这三个字符集都一致才能正确导入。 查询oracle server端的字符集,有很多种方法可以查出oracle server 端的字符集,比较直观的查询方法是以下这种:SQL>select userenv(‘language’) from dual; 结果类似如下:AMERICAN _ AMERICA. ZHS16GBK 对于查询工具结果集中的中文乱码,其实有两种情况供参考: 1.安装了服务器及配套工具,这样还出现乱码就去检查注册表中的NLS_LANG项是否设置正确,很有可能是在安装时设置了不正确的字符集造成的; 2.只安装了客户端,没有配套工具(如sqlplus等),以10g为例,注册表中是没有NLS_LANG这项的,那么要改哪?同理,还是要改字符集,不过不是在注册表中设,是要在环境变量中增加或修改,即查看windows系统环境变量是否存在NLS_LANG,若存在则修改,

MySQL中文字符乱码解决

以下的文章主要介绍的是解决MySQL中文乱码的好用方案大汇总,我们大家都知道在使用MySQL数据库时,在插入中文字符的实际操作过程中,有时会出现一些乱码,例如,中文全被用?代替。 出现这种情况的原因,多是字符集不匹配造成的。 在MySQL中,如果使用缺省的字符集,在建库、建表时,默认使用的是latin1字符集,为ISO 8859-1西欧字符集。 插入中文字符时,与之不匹配,就会出现乱码。 本人使用的是MySQL 5.0版,并用C#操作MYSQL数据库,当插入中文字符时,发现显示的是MySQL中文乱码。 初步估计是字符集没有配对。查找后,发现MSYQL默认使用的是latin1,因此将数据库的配置文件中的字符设置改为utf8,并在C#中将中文字符,转为utf8,插入后,仍为乱码。 MySQL也支持gb2312,又将MySQL的字符设置改为gb2312,C#中使用Default,重起MySQL后,操作仍然无效。 后想起,虽然将MySQL的字符集设置为gb2312或utf8,但已经建立的数据库和表,仍采用的是默认的字符集,也即仍为当初的西欧字符集,最好,只得忍痛将数据库删除,重新以gb2312字符集建立数据库和表。 再用C#插入中文字符后,一切OK。 再安装好MySQL后,可以手工或使用配置工具,将my.ini文件中的默认字符集改为gb2312,再重新建库和表时,不用再在语句中指定字符集,其默认设置也即为gb2312,可以正常显示中文字符集。 1.建立数据库是一般的语句: 1.create database dbname; 2.在库中建表时语句为: 1.create table tbname(..........)engine=MyISAM character set gb k collate gbk_chinese_ci;

MYSQL数据中文的乱码问题

最近一台服务器环境升级,mysql从4.0升级到了5.0,乱码问题让人崩溃了…… 下面搜集了一堆方法,其实最简单的还是推荐使用帝国备份王,很好,很强大! 第一种方法,很精辟的总结: 经常更换虚拟主机,而各个服务商的MYSQL版本不同,当导入数据后,总会出现乱码等无法正常显示的问题,查了好多资料,总结出自己的一点技巧: WINDOWS 下导入应该这样 使用MYSQL的命令 在DOS命令下进入mysql的bin目录下,输入mysql -uroot -p密码数据库名称<要恢复的数据库, 例如我们要把D盘的一个名称为test.sql的数据库恢复到本地的test2这个数据库,那么就这样: mysql -uroot -p密码test2以前的国外主机用的Mysql是4.x系列的,感觉还比较好,都无论GBK和UTF-8都没有乱码,没想到新的主机的Mysql是5.0版本的,导入数据后,用Php 读出来全是问号,乱码一片,记得我以前也曾经有过一次切换出现乱码的经验,原因肯定是Mysql版本之间的差异问题。 只好查资料,发现了一个解决方法,就是在mysql_connect后面加一句SET NAMES UTF8,即可使得UTF8的数据库消除乱码,对于GBK的数据库则使用SET NAMES GBK,代码如下:

$mysql_mylink = mysql_connect($mysql_host, $mysql_user, $mysql_pass); mysql_query("SET NAMES 'GBK'"); 数据库字符集为utf-8 连接语句用这个 mysql_query("SET NAMES 'UTF8'"); mysql_query("SET CHARACTER SET UTF8"); mysql_query("SET CHARACTER_SET_RESULTS=UTF8'"); 还有个方法就是,如果你自己的机器的话,可以更改MYSQL字符集,一般在MYSQ4和MYSQL5这两个版本中有效 第二个方法:很不错的解说,可以试一下 mysql乱码处理总结: (1)java中处理中文字符正常,在cmd client中显示乱码是字符集的问题. (2)字段长度设置够长,但插入中文字符时提示 com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column错误是字符集的问题. (3)乱码问题归根到底是字符集的问题,那就从字符集设置方面考虑,不外乎下面几个方面:server,client,database,connection,results.

SQLSERVER访问MYSQL表中文显示成乱码

错误描述:SQLSERVER访问MYSQL表中文显示成乱码,中文会显示成???? 解决思路:用的是mysql-5.1.50-win32 与odbc3.1版本的.现在改成ODBC5·1 这样转换就没有问题SQLSERVER连接MYSQL 建立链接如下: 数据库软件与ODBC软件:mysql-5.1.50-win32与ODBC5·1(注意,odbc3.1版本,会出现乱码)MYSQL数据库情况:gmp_test 第一步:先要在MYSQL进行授权,让主机能访问MYSQL数据库,设置如下: 在mysql数据库执行,语句: GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.216' IDENTIFIED BY 'yxtech' WITH GRANT OPTION; 第二步:在SQLSERVER主机,设置ODBC连接,设置如下图: 第三步:在SQL SERVER 配置连接,配置语句如下 --删除连接 exec sp_dropserver'dxmysql','droplogins' --建立一个新连接 EXEC SP_ADDLINKEDSERVER @server ='dxmysql', --连接名称(随意,规范就可)

@srvproduct ='MYSQL', --连接MYSQL,数据库类型,固定的 @provider ='MSDASQL', --连接MYSQL的编码,固定的 @datasrc ='my_sql' --建立的ODBC连接(第二步建立的) --建立用户连接 EXEC sp_addlinkedsrvlogin'dxmysql','false','bi_etl','root','yxtech' --'dxmysql'为连接名称 --'bi_etl'为SQLSERVER用户,如果为NULL --'root','yxtech' 为登录MYSQL 的用户及密码 --进行查询 select*FROM OPENQUERY(dxmysql,'select * from test1')

Web应用中的中文问题以及数据表乱码

一、Web应用中的中文问题: Jsp页面编码:<%@page pageEncoding=“utf-8”%> 告诉jsp引擎,在将jsp转成servlet源文件时,该jsp文件的编码是什么。<%@page contentType=“text/html;charset=utf-8”%>相当于 Servlet中的response.setContextType()。即设置相应头。 浏览器会依据该编码来显示页面,保持jsp文件时,其真正的编码应该与设置的一致。 Html: 保存html文件时,其真正的编码应该与设置的一致。 Servlet: 获取请求参数时: request.setCharacterEncoding("utf-8"); 如果servlet要直接输出一些信息: response.setContentType("text/html;charset=utf-8"); 数据库:mysql 设置数据库编码: Create database servletdb(数据库名) default character set utf8; 如果数据库已经建好了,可以使用: Alter database servletdb(数据库名) default character set utf8; (修改编码) set names gbk; 二、工具中修改编码方式: 1、改变 Eclipse 或者 MyEclipse 新建文件的默认编码 eclipse 的: window-->preferences-->General-->ContentType 改成 utf-8 。 myEclipse 的 : window-->preferences-->myEclipse-files and editors-jsp encoding 设成ISO10646/UTF-8. 2、 eclipse 和java文件编码设定 Window-->preferences-->General-->Workspace Text file encoding 改为UTF-8 。方便项目移植到linux下编写。 3、项目编码 这里遇到的问题是,眼前的项目已经编写了大部分了,然而,只想接下来的新建的文件的编码是UTF-8 ,而以前的不变。那么右键自己的项目

如何解决MYSQL数据库中文乱码问题-

如何解决MYSQL数据库中文乱码问题? 问题:如何解决MYSQL数据库中文乱码问题? 回答: 在数据库安的时候指定字符集 如果在安完了以后可以更改以下文件: C: Program Files MySQL MySQL Server 5.0 my.ini 里的所有的default-character-set=gbk C: Program Files MySQL MySQL Server 5.0 data depot_development db.opt default-character-set=gbk default-collation=gbk_chinese_ci 建立数据库时候:指定字符集类型 CREATE DATABASE haichen CHARACTER SET gbk COLLATE gbk_chinese_ci 2.建表的时候也指定字符集 CREATE TABLE student ( ID varchar(40) NOT NULL default , UserID varchar(40) NOT NULL default , ) ENGINE=InnoDB DEFAULT CHARSET=gbk; -

1。创建数据库的时候:CREATE DATABASE `database` CHARACTER SET utf8 COLLATE utf8_general_ci 2.建表的时候CREATE TABLE `database_user` ( `ID` varchar(40) NOT NULL default , `UserID` varchar(40) NOT NULL default , ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 3.设置URL的时候jdbc:mysql://localhost:3306/database useUnicode=true characterEncoding=UTF-8

SSH下mysql中文乱码问题

SSH下mysql中文乱码问题 标签:mysql中文乱码分类:mysql2010-08-25 11:05 1.在hibernate.cfg.xml配置文件中修改如下 环境:Hibernate 3.2 + MySQL5.0(MySQL的编码已设置为utf8) 问题:通过Hibernate向MySQL写入中文后,通过Hibernate取回数据,在console中打印java对象显示正常。但在MySQL Query Browser中看到的是乱码,传给前端的Flex也是乱码。原因:Hibernate的基础还是JDBC,所以一样需要设置characterEncoding! 解决方法: 在hibernate.cfg.xml中应该这样写 jdbc:mysql://localhost:3306/test?useUnic ode=true&characterEncoding=UTF-8 如果用hibernate.properties #hibernate.connection.url jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8 ps:处理中文的话,characterEncoding用GBK一样可以。 但字节编码问题最好的解决方法还是统一使用UTF-8 ----- 我的项目是: jdbc:mysql://localhost:3306/myeshop?useUnicode=tru e&characterEncoding=UTF-8 2.同样在spring里的applicationContext.xml里的数据库连接也要修改: 3.在Web.xml中配置encodingFilter过滤器,在web.xml中加入下面代码 encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 encodingFilter

Navicat MySql中文乱码问题

navicat 数据库中文乱码问题 1.右键连接属性-->高级-->Encoding-->936(Simplified Chinese GBK) 去掉User MySql character set 选项 2.数据库安装目录 my.init 更改default-character-set=utf8 3.打开mysql client,进入后再输入show variables like "%char%";可查看更改字符集后的列表. | 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 | C:\Program Files\MySQL\MySQL Server 5.1\share\chars 更改 set names utf8; 更改其中某一个 set @@character_set_database=utf8 set @@character_set_server=utf8 set @@character_set_results=utf8 set @@character_set_connection=utf8 set @@character_set_client=utf8 4.更改表与表字段字符编码方式 5.重启数据库

史上最全的PHP+MySql中文乱码解决方案

我相信PHPmyadmin里查看是乱码,调用出来的话肯定100%也是乱码。乱码问题其实也就是编码不一致导致的。要解决这个问题需要回顾乱码问题出现以前的操作是否使用的是同一种编码。 总之一句话,要解决PHP中文乱码最好最快的解决办法就是:页面申明的编码与数据库内部编码一致,如果页面申请的页码与数据库内部编码不一致时,就设定连接编码mysql_query(”SET NAMES XXX”); XXX为连接编码。一定可以解决乱码的问题。 在mysql+php程序开发中,总结了产生乱码原因: mysql数据库默认的编码是utf8,如果这种编码与你的PHP网页不一致,可能就会造成MYSQL乱码. MYSQL中创建表时会让你选择一种编码,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码. MYSQL创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码. 用户提交页面的编码与显示数据的页面编码不一致,就肯定会造成PHP页面乱码. 如用户输入资料的页面是big5码, 显示用户输入的页面却是gb2312,这种100%会造成PHP页面乱码. PHP页面字符集不正确. PHP连接MYSQL数据库语句指定的编码不正确. 一.首先是PHP网页的编码 1. php文件本身的编码与网页的编码应匹配 a. 如果欲使用gb2312编码,那么php要输出头:header(“Content-Type: text/html; charset=gb2312″),静态页面添加,所有文件的编码格式为ANSI,可用记事本打开,另存为选择编码为ANSI,覆盖源文件。 b. 如果欲使用utf-8编码,那么php要输出头:header(“Content-Type: text/html; charset=utf-8″),静态页面添加,所有文件的编码格式为utf-8。保存为utf-8可能会有点麻烦,一般utf-8文件开头会有BOM,如果使用 session就会出问题,可用editplus来保存,在editplus

数据库表中记录显示中文乱码解决

三种mysql建表乱码的解决方法 作者:温杰 MySql建表乱码问题,默认mysql建表格式为latin(瑞典语),如何设置为能够表示中文的数据库表使我们需要解决的一个很重要的数据库设计问题。 方法1、 在表中输入中文会乱码,需要在建表的时候如下 CREATE TABLE Q3_City ( city_id INTEGER NOT NULL, name VARCHAR(64)NOT NULL, region_id INTEGER NOT NULL, user_id INTEGER NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8COLLATE=utf8_unicode_ci; 最后一段添加表的编码格式,该操作比较繁琐。 方法2、在安装mysql的时候没有指定编码格式 可以在https://www.360docs.net/doc/231238330.html,f的mysqld字段下加入 default-character-set=utf8 default-storage-engine=MyISAM default-collation=utf8_bin init_connect='SET NAMES utf8' 有人这么做,但是本人的虚拟机Linux系统下的MySql不能通过此方法来实现。 方法3、 在安装mysql的时候指定编码格式(建议大家使用这种方法)如果指定了编码格式第2种方法则无效。 ./configure--prefix=/usr/local/mysql--enable-assembler--with-mysqld-ldflags=-all-static --with-charset=utf8 如上在编译mysql的时候添加编码格式,以后在该库中添加新表默认格式都为UTF8。

彻底解决MySql在UTF8字符集下乱码问题 - mysql

为了顺利的开发一个多语言的国际化J2EE程序,需要修改数据库字符集,我的做法如下: 安装MySq时选择字符集为UTF-8 修改MySql安装目录下的my.ini中配置的默认编码: 该文件中有两处这样的配置:default-character-set=latin1 将这两处改成:default-character-set=utf8 新建数据库需指定字符集: UTF8: CREATE DA TABASE mmtye DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 在命令行查看字符集编码:show variables like '%char%'; 会看到如下信息: 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\share\charsets\ 以上内容在重启MySql后也一直有效,无需每次启动数据库都要指定。 A、为了在命令行下能正确查看中文,命令行下执行: set character_set_results=gbk; B、若需要在windows命令行执行insert、update,则执行: set character_set_client=gbk; A、B 两个命令重启数据库前有效,重启后就失效了。

JDBC连接MySQL中文乱码问题及解决方案

JDBC 连接MySQL 中文乱码问题及解决方案 【摘要】JDBC 加MySQL 的开发方式深受广大软件开发者的喜爱,但有时进行数据库编程时会涉及到操作中文字段,比如通过sql 语句插入中文字段,有时会出现乱码的问题。如何解决这些问题呢?本文进行了常见的问题描述和解决方案。 【关键词】JDBC MySQL 中文乱码 一、概述 JDBC 加MySQL 的开发方式深受广大软件开发者的喜爱,但是开发中如果遇到涉及到中文时经常会遇到以下几种情况:在用jdbc 向mysql 数据库进行中文字段的查询时,数据库有该记录值但是查询却失败了;或者插入中文字段时出现了乱码。究其原因是因为mymysql 命令行客户端默认使用的字符集是latin1 ,我们查询或插入的字符串是gbk 或别的编码,由于编码不一致导致的。 二、常见问题 (1)安装mysql 过程中如果不设置使用的编码方式,采用默认的字符集创建数据库和表,在给表中的字段赋值时。无法使用中文字段,如果在建表时对该列的字符集类型进行了设置,比如设为utf8 ,则可使用中文字段。这是因为服务器、数据库、表、列均使用的是MySQL 数据库默认的编码――” latin1 ”。 (2)在使用JDBC 技术进行数据的查询时,如果采用中文

表名进行,例如查询的sql 语句为select*from 学生,则报错,究其原因为MySQL 对aql 语句中的“学生”解析失败了。 (3)在使用JDBC 技术进行数据的查询时,如果采用中文字段的插入时,插入后通过mysql 查看该字段变为了乱码。 三、解决方案乱码出现的情况都是由于客户端、服务器端、数据库、查询结果等的字符集设置有编码不一致导致的。首先了解一下MySQL 中涉及的几个字符集: character-set-server/default-character-set: 服务器字符集,默认情况下所采用的。 character-set-database 数据库字符集。character-set-table:数据库表字符集。 优先级依次增加。所以一般情况下只需要设置character-set-server,而在创建数据库和表时不特别指定字符集,这样统一采用character-set-server字符集。 character-set-client :客户端的字符集。客户端默认字符 集。当客户端向服务器发送请求时,请求以该字符集进行编character-set-results :结果字符集。服务器向客户端返回 结果或者信息时,结果以该字符集进行编码。在客户端,如果没有定义character-set-results,贝U采用character-set-client 字符集作为默认的字符集。所以只需要设置 character-set-client 字符集。要处理中文,贝可以将character-set

相关文档
最新文档