MySQL uuid()函數生成的UUID的長度問題
錯誤重新
有一user表,表結構信息如下:
現在嘗試執行以下SQL語句,向user表插入一條數據:
INSERT INTO `user` VALUES ( UUID(),"肖zy",22 )
上述SQL語句執行時產生以下錯誤信息:
INSERT INTO `user` VALUES ( UUID(),"肖zy",22 )
> 1406 - Data too long for column 'id' at row 1
> 時間: 0s
錯誤分析
從錯誤信息看,我們插入id字段的數據太長了。user表中id字段的最大長度被設置為32,也就是說UUID()函數返回的UUID的長度超過32。
下面是官方文檔中關於UUID()函數的一段說明:
UUID()
returns a value that conforms to UUID version 1 as described in RFC 4122. The value is a 128-bit number represented as autf8
string of five hexadecimal numbers inaaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
format:
從官方文檔可以看出,UUID()函數返回的UUID的長度為36。
錯誤解決
- 修改user表中id字段的限定長度
- 修改UUID()函數的返回值
使用REPLACE()函數,把UUID()函數返回值中的 “-”符號替換掉:
REPLACE( UUID(),"-","")
這樣可以將UUID()函數產生的UUID的長度縮短到32,且UUID的唯一性並不會被破壞。
官方文檔:https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_uuid