2016-11-21 222 views

回答

14

這裏的@JorgeLondoño在談論什麼的演示。

設置服務器的最大允許的數據包大小:

mysql> set global max_allowed_packet=1024*1024*1024; 

退出並重新打開MySQL客戶端,這個時候在客戶端設置最大數據包大小,以匹配:

$ mysql --max-allowed-packet=$((1024*1024*1024*)) 

與創建測試表一個JSON列並用最長的JSON文檔填充它即可:

mysql> create table test.jtest (j json); 

mysql> insert into test.jtest 
    set j = concat('[', repeat('"word",', 100000000), '"word"]'); 
Query OK, 1 row affected (1 min 49.67 sec) 

mysql> select length(j) from test.jtest; 
+-----------+ 
| length(j) | 
+-----------+ 
| 800000008 | 
+-----------+ 

這顯示了t我可以創建一個帶有1億個元素的單個JSON文檔,MySQL將它存儲在大約800MB的文件中。

我沒有嘗試更長的文檔。我假設最大值爲1 GB,這是您可以爲max_allowed_pa​​cket設置的最大值。

+0

這是1GB,因爲你建議:或'1073741824'在配置文件。 – afit

10

存儲在JSON列中的JSON文檔的大小限制爲max_allowed_packet系統變量的值。 (在服務器內存中的內部操作一個JSON值,它可以更大;該限制適用當服務器存儲。)

Command-Line Format --max_allowed_packet=# 
System Variable Name max_allowed_packet 
Variable Scope Global, Session 
Dynamic Variable Yes 
Permitted Values Type integer 
Default 4194304 
Min Value 1024 
Max Value 1073741824