newLISP Fan Club

Forum => Whither newLISP? => Topic started by: shanquan2006 on July 03, 2014, 10:30:38 PM

Title: newlisp to get mysql table command lead to messy code
Post by: shanquan2006 on July 03, 2014, 10:30:38 PM
I study newLisp for two weeks. Now I was trying to  connect mysql to get "create table sql", but it cause messy code .

 

the code is :

 (:connect db mysql-host mysql-user mysql-pwd mysql-db mysql-port)
 (set 'r (:query db (append "show create table " mysql-table-name)))  
 (set 'mysql_sql ((((:fetch-all r) 0) 1) 1))  
 (println mysql_sql )

the result is :
CREATE TABLE `tvsn` (
                `order_id` varchar(13) NOT NULL COMMENT '??ID',
                `sn` varchar(50) NOT NULL COMMENT '??SN?'
               ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='???????SN?'

but in mysqlclient, the result is :


CREATE TABLE `tvsn` (
  `order_id` varchar(13) NOT NULL COMMENT '订单ID',
  `sn` varchar(50) NOT NULL COMMENT '电视SN码'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='电视机SN码'        


some description of mysql.lsp  is:

;; @module Mysql

;; @author Jeff Ober <jeffober@gmail.com>, Kanen Flowers <kanendosei@gmail.com>

;; @version 1.05 beta

;; @location http://static.artfulcode.net/newlisp/mysql.lsp

;; @package http://static.artfulcode.net/newlisp/mysql.qwerty

;; @description A new MySQL module to replace the distribution standard module (requires newlisp 10).



how to solve it ?
Title: Re: newlisp to get mysql table command lead to messy code
Post by: hotcore on July 05, 2014, 08:24:10 AM
Maybe you don't have installed the UTF-8 version? http://www.newlisp.org/index.cgi?page=Downloads
Title: Re: newlisp to get mysql table command lead to messy code
Post by: shanquan2006 on July 05, 2014, 07:32:26 PM
Quote from: "hotcore"Maybe you don't have installed the UTF-8 version? http://www.newlisp.org/index.cgi?page=Downloads


The version I installed is:

 
-OptiPlex-3020:~$ newlisp --version
newLISP v.10.6.0 64-bit on Linux IPv4/6 UTF-8 libffi, options: newlisp -h
Title: Re: newlisp to get mysql table command lead to messy code
Post by: rrq on July 05, 2014, 11:09:22 PM
A quick glance into the source indicates that "println" is not very i18n friendly, though I don't have too much experience with it myself. Thus, my theory is that the string in newlisp is correct (i.e., the same as the other), but presented badly by println. Maybe a raw string output works better?
(write 1 <text>)
Title: Re: newlisp to get mysql table command lead to messy code
Post by: shanquan2006 on July 06, 2014, 02:17:51 AM
Quote from: "ralph.ronnquist"A quick glance into the source indicates that "println" is not very i18n friendly, though I don't have too much experience with it myself. Thus, my theory is that the string in newlisp is correct (i.e., the same as the other), but presented badly by println. Maybe a raw string output works better?
(write 1 <text>)


I modefied the program with your mehod, but the question is sitll not to solve.  
(write 1 ((((:fetch-all r) 0) 1) 1))  
 

and I checked mysql code is

mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| 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       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
Title: Re: newlisp to get mysql table command lead to messy code
Post by: rrq on July 06, 2014, 08:41:40 AM
Maybe you can explain the problem a bit more in detail.



I understood it to be that the strings in the COMMENT phrases look different in the newlisp printing than in your 'mysqlclient', which by extension might lead us to assume that the string values are different.



My theory was that the string values are actually the same in the programs, but they get presented differently; maybe it is that the console shows unicode characters, and mysqlclient has a utf8-to-unicode filter, whilst newlisp doesn't. How about saving the newlisp output to a file, and then you view this with your utf8 aware text editor?



Or maybe I don't know at all what I'm taking about and should sit quiet for a while.
Title: Re: newlisp to get mysql table command lead to messy code
Post by: csfreebird on July 28, 2014, 08:05:50 PM
I fixed this problem. Just execute the following commands in newlisp before querying data from mysql table.



(MySQL:query "SET character_set_client = utf8;")
true

(MySQL:query "SET character_set_connection = utf8;")
true
 (MySQL:query "SET character_set_results = utf8;")


Then check it:

> (MySQL:query "SHOW VARIABLES LIKE 'character%';")
true
> (dotimes (x (MySQL:num-rows)) (println (MySQL:fetch-row)))
("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" "/usr/share/mysql/charsets/")
("character_sets_dir" "/usr/share/mysql/charsets/")
Title: Re: newlisp to get mysql table command lead to messy code
Post by: Lutz on July 29, 2014, 09:37:40 AM
This is now part of the documentation: http://www.newlisp.org/code/modules/mysql.lsp.html for the standard module.