[MySQL] varchar排序

最近在抓最大值時發現不是該欄位的最大值,熊熊想起可能的原因是欄位型態是文字,檢查後果然是varchar。範例說明:

table: employee

emp_code (varchar 6)first_name (varchar 20)last_name (varchar 10)
10001JasonLai
10000BrainHuan
9999PeaterChen

SELECT * FROM employee ORDER BY emp_code DESC;

得到結果,第一筆資料的[emp_code]是9999,而非10001,透過ABS(取絕對值)修正如下:

SELECT * FROM employee ORDER BY ABS(emp_code) DESC;

ABS說明:https://www.w3schools.com/sql/func_mysql_abs.asp

其結果得到第一筆資料的[emp_code]則會是10001。

[Ubuntu] 有關proxy設定

內部網路的主機如果沒有設定proxy或設定錯誤,會發生無法上網的事情(但無法上網也有可能是防火牆等其他問題)。

若安裝時沒有設定proxy

以HTTP為例,輸入語法如下:

EXPORT HTTP_PROXY="http://proxy_username:password@your.proxy.name:port"

例如
# EXPORT HTTP_PROXY="http://user1:passwd1@192.168.0.123"
(不須設定帳密)
# EXPORT HTTP_PROXY="http://proxy.abc.com.tw:3128"

若安裝時設定proxy錯誤

只有HTTP

先執行
# EXPORT HTTP_PROXY="http://proxy.abc.com.tw:3128"
再執行
# vim /etc/apt/apt.conf
Acquire::http::Proxy "http://proxy.abc.com.tw:3128";

如果有HTTP、HTTPS、FTP

先執行
# EXPORT HTTP_PROXY="http://proxy_username:password@your.proxy.name:port"
# EXPORT HTTPS_PROXY="https://proxy_username:password@your.proxy.name:port"
# EXPORT FTP_PROXY="ftp://proxy_username:password@your.proxy.name:port"
再執行
# vim /etc/apt/apt.conf
Acquire::http::Proxy "http://proxy_username:password@your.proxy.name:port";
Acquire::https::proxy "https://proxy_username:password@your.proxy.name:port";
Acquire::ftp::proxy "ftp://proxy_username:password@your.proxy.name:port";

[WordPress] 自訂欄位,配合Plugin–WPGlobus – Multilingual Everything!,修改theme

最近同事反應單位WP網站的文章主要是會議消息,所以希望要求網站的category list要修改成:

[日期] 講者姓名 — 會議標題(就是文章標題)

範例如下:

[1-SEP-2018] Dr. Jason — ABC…
[2-SEP-2018] Prof. Marry — DEF…
[5-SEP-2018] Prof. Tom — GHI…

而且網站有使用plugin【WPGlobus – Multilingual Everything!】做多國語系(中/英文)…

所以中文範例如下:

[107年9月1日] 傑森博士 — ABC…
[107年9月2日] 瑪莉教授 — DEF…
[107年9月5日] 湯姆教授 — GHI…

所以,新增兩個自訂欄位:spec-date、spec-name,在每一篇文章設定自訂欄位與其中英文對應的值

p1p2

請參酌官方自訂欄位說明,亦可參考如何使用WP自訂欄位這篇文章,將自訂欄位值帶出之PHP程式如下:

get_post_meta($post_id, $key, $single);

依上述範例,程式為:

echo get_post_meta( $post->ID, ‘spec-date’, true );
echo get_post_meta( $post->ID, ‘spec-name’, true );

但得出來的值會顯示成:

{:tw}107年9月5日{:}{:en}5-SEP-2018{:}
{:tw}湯姆教授{:}{:en}Prof. Tom{:}

還要針對此值配合plugin【WPGlobus – Multilingual Everything!】的api調整顯示,可參考WPGlobus Compatibility with Themes and Plugins,語法如下:

$text_in_meta = get_post_meta( $post->ID, ‘meta_key’, true );
echo apply_filters( ‘the_title’, $text_in_meta );
$text_in_options = get_option( ‘option-name’ );
echo apply_filters( ‘the_title’, $text_in_options );

依上述範例,程式修改為:

$spec_date = get_post_meta( $post->ID, ‘spec-date’, true );
$spec_name = get_post_meta( $post->ID, ‘spec-name’, true );
echo “[“.apply_filters( ‘the_title’, $spec_date )."] “;  // 顯示:[日期]
echo apply_filters( ‘the_title’, $spec_name )." — “;  // 顯示:講者姓名 —
echo get_the_title( $archive_post->ID );  // 顯示:會議標題

但考量有些文章可能不是和會議有關,所以修改如下:

$spec_date = get_post_meta( $post->ID, ‘spec-date’, true );
$spec_name = get_post_meta( $post->ID, ‘spec-name’, true );
if((isset($spec_date))&&($spec_date !="")) echo “[“.apply_filters( ‘the_title’, $spec_date )."] “;
if((isset($spec_name))&&($spec_name !="")) echo apply_filters( ‘the_title’, $spec_name )." — “;
echo get_the_title( $archive_post->ID );  // 顯示:會議標題

最後,修改category.php,並把不要的部分隱藏,結果如下:

p3

 

[Oracle]Insert資料發生ORA-01843的錯誤

最近幫同仁匯入資料時,例如下述SQL語法:

Insert into SchemaName.TableName (username,payment,insertdate) values (‘Jason’,3889,to_date(’11-JUN-17′,’DD-MON-RR’));
Insert into SchemaName.TableName (username,payment,insertdate) values (‘May’,4129,to_date(’12-JUN-17′,’DD-MON-RR’));
Insert into SchemaName.TableName (username,payment,insertdate) values (‘Karen’,2814,to_date(’15-JUN-17′,’DD-MON-RR’));

Table欄位說明:

username: varchar2 (20) NULL
payment: float NULL
insertdate: date NULL

但都出現"ORA-01843: 不是有效的月份"的錯誤。例如:

Insert into SchemaName.TableName (username,payment,insertdate) values (‘Jason’,3889,to_date(’11-JUN-17′,’DD-MON-RR’))
錯誤報告 –
ORA-01843: 不是有效的月份

查詢時間格式,與Insert一樣:

select sysdate, dump(sysdate) as date_bytes from dual;

SYSDATE              DATE_BYTES                           
-------------------- -----------------------------------
04-SEP-18  Typ=13 Len=8: 226,7,9,4,11,45,54,0

再查了設定:

SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER LIKE ‘%LANGUAGE’;

PARAMETER         VALUE                    
---------------- ---------------------
NLS_LANGUAGE      AMERICAN 
NLS_DATE_LANGUAGE AMERICAN

看起來設定都沒有問題

找了不少資料,最後結論是增加一個parameter:’NLS_DATE_LANGUAGE = AMERICAN’,例如:

Insert into SchemaName.TableName (username,payment,insertdate) values (‘Jason’,3889,to_date(’11-JUN-17′,’DD-MON-RR’,’NLS_DATE_LANGUAGE = AMERICAN’))

於是就能順利Insert了!

[WordPress] 如何因應GDPR

 

1.更新WordPress至4.9.6以上版本

WordPress 4.9.6釋出,助網站擁有者因應GDPR法遵

資料來源
https://www.ithome.com.tw/news/123277

WordPress官方提醒,GDPR保護的是歐盟居民,因此無論企業身在何處,都需要在個人資料處理行為上遵守GDPR。

文/李建興 | 2018-05-19發表

由於GDPR將在5月25日正式上路,WordPress釋出4.9.6版本,雖在網站功能上沒有太大調整,但是增加了幾項重要個人資料的處理功能,以符合GDPR要求。

GDPR要求企業以及網站,在收集、使用以及分享個人資料的時候保持透明,且賦予個人更多的選擇權處理這些被收集的資料。WordPress官方提醒,GDPR保護的是歐盟居民(EU residents),因此無論企業身在何處,都需要在這些資料處理行為上遵守GDPR。

在WordPress 4.9.6中,網站擁有者可以指定一個隱私政策專頁,這個專頁會出現在登入以及註冊頁面,網站擁有者應該為網站每一個頁面都添加這個專頁的鏈結,官方提到,出現在每個頁面的Footer菜單,將會是理想的選項。

另外,WordPress也提供了隱私指南,其中包含了WordPress以及插件處理個人資料的資訊,網站擁有者可以將這些資訊複製到網站的隱私政策中作為草稿。而開發者維護的是執行資料收集的插件,也能在隱私政策指南中包含這些資訊。

在功能細節上,個人資料工具頁面上,現在多出了輸出選項,可以讓使用者選擇輸出個資,並下載ZIP壓縮檔案。在網頁的評論功能上,登出的評論者能選擇網站是否以Cookie的形式,儲存其姓名、電子郵件信箱以及網站在瀏覽器上。使用者也可以選擇在網站上,完全抹除其個人資料,包含插件收集的資料。

WordPress 4.9.6包含GDPR相關的共有95項更新,其它還包括在媒體庫增加我的功能,或是在管理員查看插件時,會顯示最低需求PHP版本,另外還新增了PHP Polyfills支援向前相容。

2.點選後台Setting的Privacy,按下右下方的"Create New Page"

step2

3.網站會自動將Privacy Policy範本帶入,再針對內容調整修改後發布(隱私權政策)

step3

備註:範本內容可點選"Check out our guide"連結

3.安裝Plugin–wordfenceGDPR

以強化網站安全性與個資蒐集處理聲明

參考資料

https://blog.design-hu.com/wordpress/wordpress-indro/wp-privacy.html

http://www.wpbeginner.com/beginners-guide/the-ultimate-guide-to-wordpress-and-gdpr-compliance-everything-you-need-to-know/

https://pagely.com/blog/gdpr-wordpress-2018-resources/