1. 程式人生 > >Mysql 中 varchar 比較 Oracle varchar2

Mysql 中 varchar 比較 Oracle varchar2

MySQL和oracle做資料同步。其中表的一個欄位在mysql中設定為varchar(6),Oracle中為varchar2(6)
但mysql中能正常存放的資料同步到oracle中卻抱ORA-12899: value too large for column錯誤。
這是為什麼呢?

mysql中varchar(6)代表可以存放6個漢字,6個字母,或6個數字。
oracle中varchar2(6)代表可以中存放6個位元組。即oracle中varchar2的長度代表位元組數而不是字元數。
mysql中一個漢字佔三個位元組,Oracle中一個漢字佔兩個位元組。

雖然mysql varchar 和orache varchar2中欄位設定相同的長度,但oracle中卻存放不下。

1.1. Mysql中新建表tmysql
CREATE TABLE tmysql (
  name varchar(6) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf

1.2.插入6個漢字

insert into t values('北京蒙迪艾爾');

1.3.可以成功插入,並查詢出結果

mysql> select name ,length(name)  ,char_length(name) 
from tmysql;
+--------------+--------------+-------------------+
| name         | length(name) | char_length(name) |
+--------------+--------------+-------------------+
| 北京蒙迪艾爾 |           18 |                 6 |
+--------------+--------------+-------------------+
1 row in set

2.1. Oracle中新建表toracle

Oracle:

SQL> create table toracle
  2  (
  3    NAME VARCHAR2(6)
  4  );

Table created

2.3 在oracle的varchar2(6)中同樣插入6個漢字

SQL> insert into toracle values('北京蒙迪艾爾');
insert into toracle values('北京蒙迪艾爾')
ORA-12899: value too large for column "SCOTT"."TORACLE"."NAME" (actual: 12, maximum: 6)

-- 在oracle中varchar2(6)中插入6個漢字失敗

SQL> select length('北京蒙迪艾爾') from dual;
LENGTH('北京蒙迪艾爾')
----------------------
                    6
SQL> insert into toracle values('蒙迪艾');
1 row inserted

SQL> select name ,length(name) from toracle;
NAME   LENGTH(NAME)
------ ------------
蒙迪艾            3   
SQL> insert into toracle values('蒙迪艾爾');
insert into toracle values('蒙迪艾爾')
ORA-12899: value too large for column "SCOTT"."TORACLE"."NAME" (actual: 8, maximum: 6)


如果想讓mysql varchar中存放的漢字可以在orale中varchar2中存放的下。

(因為mysql中一個漢字佔三個位元組,oracle中一個漢字佔兩個位元組)。 

要存放4個漢字,mysql每1長度代表一個字元,
應該是 varchar(4) ;Oracle 每1長度代表一個位元組的話,應該是 varchar2(8),算下來 Oracle的長度應該保持為Mysql的2倍才對

參考:

相關推薦

Mysql varchar 比較 Oracle varchar2

MySQL和oracle做資料同步。其中表的一個欄位在mysql中設定為varchar(6),Oracle中為varchar2(6)但mysql中能正常存放的資料同步到oracle中卻抱ORA-12899: value too large for column錯誤。 這是為什麼呢? mysql中varch

Mysql varchar VS Oracle varchar2

mysql和oracle做資料同步。其中表的一個欄位在mysql中設定為varchar(6),Oracle中為varchar2(6)但mysql中能正常存放的資料同步到oracle中卻抱ORA-12899: value too large for column錯誤。 這是為

mysqlvarchar和char區別(思維導圖整理)

var 但是 系統 mysql 由於 varchar .html nbsp 了解   由於mysql一直是我的弱項(其實各方面我都是很弱的),所以最近在看msyql,正好看到varchar和char區別,所以整理一下,便於以後遺忘。      0.0圖片已經說明一切,但是系

mysql Varchar 與char的區別

計算機 一個 個數 arc eat 每一個 set span 方式 一、字符與字節與編碼關系 ASCII碼中,一個英文字母(不分大小寫)占一個字節的空間,一個中文漢字占兩個字節的空間。一個二進制數字序列,在計算機中作為一個數字單元,一般為8位二進制數,換算為十進制。最小值0

MySql : varcharvarchar 的區別 mysql int(10)的含義 MySqlvarchar(10)和varchar(100)的區別==>>以及char的利弊

mysql int(10)的含義 int(M) M表示最大顯示寬度。最大有效顯示寬度是255。顯示寬度與儲存大小或型別包含的值的範圍無關。 在 int(M) 中,M 的值跟 int(M) 所佔多少儲存空間並無任何關係。 int(1)

MySQLvarchar與char區別

MySQL中varchar最大長度是多少? 一. varchar儲存規則: 4.0版本以下,varchar(20),指的是20位元組,如果存放UTF8漢字時,只能存6個(每個漢字3位元組)  5.0版本以上,varchar(20),指的是20字元,無論存放的是數字、字母還是UTF8

int(11)最大長度是多少,MySQLvarchar最大長度是多少(轉)

int(11)最大長度是多少,MySQL中varchar最大長度是多少?   int(11)最大長度是多少?   在SQL語句中int代表你要建立欄位的型別,int代表整型,11代表欄位的長度。   這個11代表顯示寬度,整數列的顯示寬度與mysql需要用多少個字元來顯

MySQLVARCHAR(n)最多能存多少個漢字

首先要確定自己使用的MySQL版本是多少 (1)MySQL 4.0 版本以下,VARCHAR(n) 中的 n 指的是改欄位容量為 n 位元組。如果存放的漢字為UTF8編碼時(utf8編碼每個漢字佔3位元組),則只能存16個漢字。 (2)MySQL 5.0 版本以上,VARCH

mysqlvarchar(N)的N代表什麼

據說是面試題中很經典的一道,在這裡做一個實驗說明一下。 CREATE TABLE `wzy` (   `ColUTF` varchar(5) CHARACTER SET utf8 DEFAULT NULL,   `ColGBK` varchar(5) CHARACTER S

MySql varcharvarchar 的區別

一般初學會認為,二者佔用的空間是一樣的。比如說我儲存5個char,二者都是實際佔用了5個char了【勘誤:varchar在實際儲存的時候會多一個byte用來存放長度】。 但是深入一下,設計資料庫的時候,二者一樣嗎?答案是否定的【至少varchar型別需要在資料之前利用一個或

mysqldatetime比較大小

select sum(studychj) as tofflinejz from afterline where chec

MySQLvarchar欄位值包含空格查詢問題解決辦法

前提條件:mysql提供了char和varchar兩種欄位型別,但若查詢條件where中包含char或varchar的限制條件,那麼會忽略char或varchar欄位記錄中末尾的空格字元。 原因:mysql中字串比較的時候使用的是PADSPACE校對規則,會忽略字元欄位最後的空格。 解決方法如下,例如查詢

Mysqlvarchar型別的貓膩!

### varchar的儲存規則 4.0版本以下,varchar(20),指的是20位元組,如果存放UTF8漢字時,只能存6個(每個漢字3位元組)。 5.0版本以上,varchar(20),指的是20字元,無論存放的是數字、字母還是UTF8漢字(每個漢字3位元組),都可以存放20個,最大大小是65532位元組

SQL那些事兒(十三)--Oraclevarcharvarchar2區別

部落格統計 [removed]var cnzz_protocol = (("https:" == [removed].protocol) ? " https://" : " http://");[removed](unescape("[removed][removed]")

Oraclevarcharvarchar2

CHAR、VARCHAR、VARCHAR2區別:    1.CHAR的長度是固定的,而VARCHAR2的長度是可以變化的, 比如,儲存字串“abc",對於CHAR (20),表示你儲存的字元將佔20個位元組(包括17個空字元),而同樣的VARCHAR2 (20)則只佔用3

mysqlvarchar(20)和oraclevarchar2(20)有什麼不同?

這裡講一下編碼,涵蓋內容包括:gbk、utf8編碼,漢字,資料庫,為什麼會出現亂碼。 Mysql庫,character為utf_8 建表test: create table test(a varc

mysqlchar,varchar與text類型的區別和選用

數據庫服務器 填充 處理 sdn ext 支持 內容 總結 ace 關於char,varchar與text平時沒有太在意,一般來說,可能現在大家都是用varchar。但是當要存儲的內容比較大時,究竟是選擇varchar還是text呢?不知道。。。。。。 text 、 cha

oraclemysql的命令 show databases, show tables, desc table類似的命令集

copyright 星期六 time 語句 什麽 ora cte 一個 select 1 怎樣執行一個sql腳本文件,這個腳本文件寫了一系列的sql語句集,比如sql.sql 放在D:\MyEclipse 8.6\Workspaces\OASystem\WebRoot\sq

【坑】 MySQL,字符串和數值的比較

【坑】 mysql中 字符串和數值的比較 官方文檔:https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html原文:Comparison operations result in a value of 1 (TRUE), 0 (F

OracleMySQL執行sql指令碼生成hive建表語句

python3指令碼: #mysql for i in range(len(table_name)): sql1 = """SELECT CONCAT('create table ','%s','(') UNION ALL SELECT CONCAT(