2013-03-12 28 views
5

我怎麼能看到在字符串中的空格中進行選擇時?怎麼看的數據空間與mysql命令行客戶端使用選擇與SQL命令行客戶端時

我的意思是下面。你有三條線。 1,2和3空格。 您沒有機會看到空格的數量。

create table foo(bar varchar(8)); 
insert into foo values(" "),(" "), (" "); 

select * from foo\g 
+------+ 
| bar | 
+------+ 
|  | 
|  | 
|  | 
+------+ 

mysql> select * from foo\G 
*************************** 1. row *************************** 
bar: 
*************************** 2. row *************************** 
bar: 
*************************** 3. row *************************** 
bar:  
3 rows in set (0.01 sec) 

我想出的唯一選項是:

mysql> select bar, hex(bar) from foo; 
+------+----------+ 
| bar | hex(bar) | 
+------+----------+ 
|  | 20  | 
|  | 2020  | 
|  | 202020 | 
+------+----------+ 
3 rows in set (0.01 sec) 

喜歡的東西var_export在PHP將是很好。

+1

怎麼樣加入一些前後字符? 'select bar,'>'+ bar +'<'from foo' – 2013-03-12 13:18:57

+0

我也想到了這一點。在MySQL中它不是很方便:「concat('>',bar,'<')」,並且該字符串不會正確地被ecsaped。 – jens 2013-03-12 21:10:10

回答

5

看樣子有一個字符串函數QUOTE(逃避在SQL語句中使用的參數),這非常好。

-- to add another tricky example 
mysql> insert into foo values(" \" ' "), ("''"); 
Query OK, 1 row affected (0.06 sec) 

mysql> select bar, quote(bar) from foo; 
+-------+------------+ 
| bar | quote(bar) | 
+-------+------------+ 
|  | ' '  | 
|  | ' '  | 
|  | ' '  | 
| " ' | ' " \' ' | 
| '' | '\'\''  | 
+-------+------------+ 
4 rows in set (0.00 sec) 
0

如果這只是顯示空間,那麼你就需要你保存它之前的字符串編碼。如果是關於比較,那麼你會發現前導字符串(在非空間之前)被保留,而尾隨則不被保留。查看更多在這裏:here

0

如何使用字符串LENGTH()得到了類似的結果phpvar_export()

SELECT bar, LENGTH(bar) FROM foo; 
+0

這可能適用於短字符串,但長字符串(例如325字符)呢?你再也無法確定字符串在哪裏結束了。 – jens 2013-03-12 19:45:41

0

可以更換一些其他字符空格輸出如下:

mysql> SELECT REPLACE(' ', ' ', '|'); 

+--------------------------+ 
| REPLACE(' ', ' ', '|') | 
+--------------------------+ 
| |||      | 
+--------------------------+ 
1 row in set (0.00 sec)